繁体   English   中英

什么是更有效的“ ||”或循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM