ArrayList比较并获取共享值

时间:2012-04-08 14:18:39

标签: java arraylist

我很想找到解决以下问题的方法。 我有4个不同的ArrayList从数据库中获取它们的值。 它们的大小可以从0(包括)到现在。 每个列表也可能具有不同的大小和值。 我想要有效地做的是: 比较所有非0大小的列表,并检查它们是否有一些共同的整数以及这些值是什么。

有什么想法吗? 谢谢!

4 个答案:

答案 0 :(得分:6)

如果你需要一个普通整数的集合,不包括空整数:

List<List<Integer>> lists = ...
Collection<Integer> common = new HashSet<Integer>(lists.get(0));
for (int i = 1; i < lists.size(); i++) {
   if (!lists.get(i).isEmpty()) 
     common.retainAll(lists.get(i));
}

最后common将包含所有这些整数相同的整数。

答案 1 :(得分:2)

您可能希望使用apache commons CollectionUtils.intersection()来获取两个集合的交集......

迭代生成交集,如果完成后它不是空的 - 你有一个共同的元素,它就在这个结果集合中。

关于空列表:只检查其size()是否为0,如果是,则跳过此列表。

答案 2 :(得分:2)

您可以对ArrayList对象使用set intersection操作。

这样的事情:

List<Integer> l1 = new ArrayList<Integer>();

l1.add(1);
l1.add(2);
l1.add(3);

List<Integer> l2= new ArrayList<Integer>();
l2.add(4);
l2.add(2);
l2.add(3);

List<Integer> l3 = new ArrayList<Integer>(l2);
l3.retainAll(l1);

现在,l3应该只有l1和l2之间的共同元素。

答案 3 :(得分:0)

你可以这样做。如果要搜索多个元素,请将搜索放在循环中。

列出aList = new ArrayList(); aList.add(new Integer(1));

if(aList!= null&amp;&amp;!aList.isEmpty()){    if(aList.contains(1)){       System.out.println(“得到它”);   } }