2012-04-08 50 views
1

我打破了我的想法,以找到解决以下问题。 我有4个不同的ArrayList从数据库中获取它们的值。 他们可以从0(包括)的大小,直到永远。 每个列表也可能具有不同的大小和值。 我试图有效地做的是: 比较所有非0大小的列表,并检查它们是否有一些常见的整数和那些值。ArrayList比较和获取共享值

任何想法? 谢谢!

回答

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

如果其中一个列表是空的,这个工作是否可行?因为如果它是空的,我仍然需要知道其他列表中是否有共同的值。 – Vagelism 2012-04-08 14:25:28

+1

你需要什么 - 所有列表中的普通整数,或者是一组整数,其中每一个对于其中至少两个是共同的? – 2012-04-08 14:29:46

+0

只是所有具有值的列表的常见整数。如果它们没有值,则不需要在它们之间进行比较。例如,如果3个列表中有值,我想知道是否存在共同值其中3个是什么,这个值是什么。 – Vagelism 2012-04-08 14:33:19

2

你可能会想使用Apache的百科全书CollectionUtils.intersection()得到两个集合的交集......

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

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

0

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

List aList = new ArrayList(); aList.add(new Integer(1));

如果(!ALIST = NULL & & aList.isEmpty()){ 如果(aList.contains(1)){ 的System.out.println( “知道了”); } }

2

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

事情是这样的:

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

+0

与2列表似乎很容易!现在如果有4个,我们不知道女巫是否有价值? – Vagelism 2012-04-08 14:36:38