让我们说你必须编辑arraylist中的一系列单词(" cat"," dog"," catdog"," mandog& #34)
现在你可以把它放到像这样的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中并使用它进行比较。
哪一个更有效率?
考虑到单词列表可能非常大。
感谢您的帮助。
答案 0 :(得分:4)
两者都没有,性能差异可以忽略不计,它们在关键字列表的大小上都是线性的。
考虑到单词列表可能会变得很大,您应该使用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
相同,因此我们只需测试相等性。
答案 1 :(得分:1)
我认为适当的方式(虽然有更多工作)是测试所有选项。使用分析器查看代码执行查找所花费的时间,然后使用产生最佳结果的过程。
如果不使用分析器,很难确定性能方面的改进。
答案 2 :(得分:0)
由于您在代码中使用matches()
方法,我假设您需要对正则表达式进行匹配。如果是这种情况,您可以选择嵌套的for循环。
String[] patterns = {"cat", "dog"};
for(String item : arraylist){
for(String pattern : patterns){
if(item.matches(pattern)){
//do something
}
}
}
如果您只是想检查列表中是否存在字符串,您可以使用Stefano Sanfilippo方法。