[英]What is more efficient “||” or a loop?
假设您必须编辑arraylist中的一系列单词(“ cat”,“ dog”,“ catdog”,“ mandog”)
现在,您可以像这样将其放入for循环中
for(int i=0; i<arraylist.size(); i++){
if(arraylist.get(i).matches("cat") || arraylist.get(i).matches("dog") etc.. etc..
{
//do something
}
}
或者,您可以将单词(cat,dog,catdog和mandog)放入字符串数组/ arraylist中,并使用它们进行比较。
哪一个更有效?
考虑到单词列表可能很大。
谢谢您的帮助。
两者的效果差异都可以忽略不计,两者在关键字列表的大小上在时间上都是线性的。
考虑到单词列表可能会变得很大,您应该使用Set
。 HashSet
可以在恒定时间内执行contains
检查,因此非常适合此目的。 所以:
Set<String> keywords = new HashSet<>();
keywords.add("cat");
keywords.add("dog");
// ...
for (String element: arraylist) {
if (keywords.contains(element)) {
// Do something
}
}
请注意,实际使用matches
实际上与使用equals
相同,因此我们可以简单地测试相等性。
我认为适当的方法(尽管还有很多工作要做)是测试所有选项。 使用探查器可以查看代码执行查找所需的时间,然后执行产生最佳结果的过程。
如果不使用分析器,则很难确定性能的提高。
由于您在代码中使用matches()
方法,因此我假设您需要对正则表达式进行匹配。 如果是这种情况,您可以使用嵌套的for循环。
String[] patterns = {"cat", "dog"};
for(String item : arraylist){
for(String pattern : patterns){
if(item.matches(pattern)){
//do something
}
}
}
如果您只想检查列表中是否存在该字符串,可以采用Stefano Sanfilippo方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.