我有两个ArrayList.每个都是100000大小.我想比较它们并计算匹配的元素.
这是我的代码:
for (int i = 0; i < mArryLst2.size(); i++) {
if (ArryLst1.contains(mArryLst2.get(i))) {
matchedPixels++;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的比较过程耗费了大量时间.
如何解决和优化这个问题.
dku*_*mar 10
您应该使用CollectionUtils.retainAll:返回一个集合,其中包含collection1中也在collection2中的所有元素.
ArrayList commonList = CollectionUtils.retainAll(list1,list2);
Run Code Online (Sandbox Code Playgroud)
您应该将第一个列表转换为HashSet.HashSet查找是O(1),列表查找是O(n).这使得整个算法O(n)而不是O(n ^ 2)
Set<Foo> set1 = new HashSet<Foo>(list1);
for (Foo foo : list2) {
if (set1.contains(foo)) {
matchedPixels++;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43229 次 |
| 最近记录: |