1

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

有任何想法吗?谢谢!

4

4 回答 4

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将包含对所有这些都通用的整数。

于 2012-04-08T14:21:40.700 回答
2

您可能想要使用 apache commonsCollectionUtils.intersection()来获取两个集合的交集......

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

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

于 2012-04-08T14:23:42.400 回答
2

您可以对 ArrayList 对象使用集合交集操作。

像这样的东西:

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 之间的共同元素。

于 2012-04-08T14:26:49.857 回答
0

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

列出 aList = new ArrayList(); aList.add(新整数(1));

if(aList !=null && !aList.isEmpty()) { if(aList.contains(1)) { System.out.println("知道了"); } }

于 2012-04-08T14:26:06.497 回答