【发布时间】:2019-04-23 16:10:28
【问题描述】:
我有两个列表,例如:
列表 1:只有一个元素
List<String> ids=new ArrayList<String>();
列表 2:有 1000 个对象
List<ABC> abc= new ArrayList<ABC>();
a.matIDS
注意:matIDS 是字符串集合(例如:abc,def,ghi)
for(ABC a : abc){
for(String id : a.matIDs()){
if(ids.contains(id)){
LOG.info("ID found:::");
}else{
LOG.info("ID NOT found:::");
}
}
}
问题:
在列表 1 中只有 1 个元素,而在列表 2 中有 1000 个元素。 我是否需要检查所有这 1000 个元素才能找到第一个元素?
有没有更好的办法?
【问题讨论】:
-
也许你应该在找到匹配项时
break -
在目前的情况下,在一次性场景中只寻找一个元素,O(n) 是你所希望的最好的。您可以通过多线程或提前做一些事情来加速它(在构建列表时创建某种查找表),但对于单个用例,它仍然是 O(n)。如果您多次使用它,那么还有更有效的方法
-
你所说的“更好的方法”到底是什么意思?您是在寻求一种更优雅的搜索方式,还是专门追求性能改进?如果它是性能改进,那么答案可能是:如果仅对 1000 个对象进行不常见的搜索,请不要打扰
标签: java list search arraylist collections