从两个Java Collection对象中获取两个唯一值

时间:2012-07-28 04:09:35

标签: java collections unique

我想从两个Collection对象中获取唯一值。我该怎么办? 示例:我们取两个ArrayLists

List bag1 = new ArrayList(); 
List bag2 = new ArrayList();

bag1.add("1");
bag1.add("2");
bag1.add("3");
bag1.add("7");
bag1.add("8");
bag1.add("9");

bag2.add("4");
bag2.add("5");
bag2.add("6");
bag2.add("7");
bag2.add("8");
bag2.add("9");

我需要得到像 - >这样的结果来自bag1的1,2,3和来自bag2的4,5,6

你能帮帮我吗?

5 个答案:

答案 0 :(得分:1)

两件事:

  1. 使用org.apache.commons.collections.CollectionUtils.disjunction(Collection a,Collection b);
  2. Bag不是列表的最佳变量名称。 :)

答案 1 :(得分:0)

你应该看看套装。 Java Collection有一些类可以解决这个问题。想法是你可以只是两个集合之间的集合差异,你会得到你的答案。

答案 2 :(得分:0)

使用'set'存储您的数据。这样,当您向集合添加元素时,您的集合将具有唯一元素。

请参阅此处的javadoc:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

答案 3 :(得分:0)

你试过试试......

bag1.removeAll(bag2);

如果你想保持bag1和bag2完好无损,你可以使用Set变量并将bag1的所有值传递到Set,然后检查contains()

    Set set = new HashSet();
    set.addAll(bag2);
    for(Object o: bag1){
        if(!set.contains(o)){
            // Do whatever you want with bag1 elements
        }
    }
    set.clear();

    set.addAll(bag1);
    for(Object o: bag2){
        if(!set.contains(o)){
            // Do whatever you want with bag2 elements
        }
    }

答案 4 :(得分:0)

使用Set interface中的removeAll方法定义。

Set intersect = new TreeSet(bag1);  
intersect.removeAll(bag2);  
List unique1 = Arrays.asList(intersect);  

intersect = new TreeSet(bag2);  
intersect.removeAll(bag1);  
List unique2 = Arrays.asList(intersect);