如何比较两个arraylist?

SuR*_*aTi 7 java android

我有两个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)


JB *_*zet 5

您应该将第一个列表转换为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)

  • 所以呢?OP想要检查列表是否包含某些元素.如果它包含它,该集将包含它.如果它不包含它,则该集合将不包含它. (2认同)
  • 不,它不能有所不同.重新阅读我的评论.OP不计算列表中包含元素的次数.它检查它是否在列表中.它怎么可能在列表中而不是在包含与列表相同的元素的集合中(只有一次而不是几次)? (2认同)