2012-07-13 67 views
0

我有两个ArrayList都包含整数值。我的目标是比较这两个列表得到相同/共同/重复的值。换句话说(用SQL的说法),我需要两个列表的INTERSECT结果,也就是两个列表中都出现的值。2包含整数值的ArrayList的INTERSECT结果

例子:

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
list1.add(100); 
list1.add(200); 
list1.add(300); 
list1.add(400); 
list1.add(500); 

ArrayList<Integer> list2 = new ArrayList<Integer>(); 
list2.add(300); 
list2.add(600); 

一种实施/解决方案,我能想到一起是循环的名单像一个:

ArrayList<Integer> intersectList = new ArrayList<Integer>(); 

for (Integer intValue : list1) 
{ 
    if(list2.contains(intValue)) 
     intersectList.add(intValue); 
} 

在这种情况下,intersectList将只包含1 Integer正在添加的项目,即300,它出现在两个列表中。

我的问题是,有没有更好/最快/有效的方式来实现这个逻辑?在Apache Commons库中可用的任何选项?任何其他的想法/建议/意见,表示赞赏。

注意:为了便于说明,我刚才在此处显示了5个项目和2个项目被添加到列表中。在我的实时实现中,每个列表中将有超过1000个元素。因此,性能也是一个要考虑的关键因素

+0

http://stackoverflow.com/questions/5283047/intersection-union-of-arraylists-in-java的可能重复 – DDK 2012-07-13 10:32:31

回答

4

如果您能够接受的结果改写为列表1:

list1.retainAll(list2);

否则克隆/复制列表1第一。

虽然不确定。

0
list1.retainAll(list2)//for intersection 
0

如果您不想修改现有列表,请使用org.apache.commons.collections中的ListUtils。

ListUtils.intersection(list1, list2)