从不同的集中检索唯一的元素集

时间:2011-01-10 10:29:32

标签: java

可以使用什么方法返回只能在set a或set b中找到的一组元素, 但不是在两个集合中?

3 个答案:

答案 0 :(得分:3)

您正在寻找symmetric difference

理论上,创建两个集合的 union 并删除交集

Set a = getSetA();
Set b = getSetB();

// create union
Set union = new Set(a);
union.addAll(b);

// remove intersection
for (Object inA : a)
  if(b.contains(inA))
    union.remove(inA);

答案 1 :(得分:1)

    Set<Integer> s1 = new HashSet<Integer>();
    Set<Integer> s2 = new HashSet<Integer>();

    s1.add(2); 
    s1.add(1);
    s2.add(3);
    s2.add(1);

removeAll

  

从此集合中删除指定集合中包含的所有元素(可选操作)。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的不对称集合差异。

    System.out.println(s2.removeAll(s1)); // true
    System.out.println(s2); // [3]

retainAll (intersection)

  

仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集

    System.out.println(s2.retainAll(s1)); // true
    System.out.println(s2);  // [1]

addAll (union)

  

如果指定集合中的所有元素尚未存在(可选操作),则将其添加到此集合中。

    System.out.println(s1.addAll(s2)); //true
    System.out.println(s1);  //[1,2,3]

答案 2 :(得分:0)

我认为你需要与众不同。所以对于集合s1和s2:s1.removeAll(s2)