Java:比较两个列表

时间:2014-10-28 09:15:59

标签: java list

我有两个清单。 例如:

A = {21, 41, 96, 02}
B = {21, 96, 32, 952, 1835}

我想要的是结果:R = {32, 952, 1835}

像这样: Example Picture

在此之后,我想将结果R添加到A

A = {21, 41, 96, 02, 32, 952, 1835}

4 个答案:

答案 0 :(得分:3)

很简单:)

List<Integer> a = new ArrayList<>(Arrays.asList(21, 41, 96, 02));
List<Integer> b = new ArrayList<>(Arrays.asList(21, 96, 32, 952, 1835));

b.removeAll(a)

// now list b contains (32, 952, 1835)

a.addAll(b);

// now list a contains (21, 41, 96, 02, 32, 952, 1835)

答案 1 :(得分:1)

所以,你想要这两个集合的集合重聚。这就是sets的用途。

HashSet<Integer> set = new HashSet<Integer>();
set.addAll(a);
set.addAll(b);

答案 2 :(得分:0)

所以你想要做A = A U B.为此,你可以在A中搜索B的每个元素,如果搜索失败,则将元素添加到A.但是,不建议在列表中进行过多搜索。

我建议使用HashMap。创建一个HashMap并循环遍历A和B,将您看到的任何内容放入地图中。之后,您可以将地图转换回列表。

[如果您希望订单与示例中的相同,则应将A转换为地图。然后你应该通过B并且对于每个失败的map.get(元素),你应该将B的元素添加到A中。]

答案 3 :(得分:0)

试试这个:

import org.apache.commons.collections.CollectionUtils;

[...]
    //  Returns a Collection containing the exclusive disjunction (symmetric difference) of the given Collections.
    Collection disJointList = CollectionUtils.disjunction(a, b);  
    //To check
    for (Object object : disJointList) {  
            System.out.println(disJointList);  
            //output is {32, 952, 1835} 
    }   

    a.addAll( disJointList );