可以使用什么方法返回只能在set a或set b中找到的一组元素, 但不是在两个集合中?
答案 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);
从此集合中删除指定集合中包含的所有元素(可选操作)。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的不对称集合差异。
System.out.println(s2.removeAll(s1)); // true
System.out.println(s2); // [3]
仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集
System.out.println(s2.retainAll(s1)); // true
System.out.println(s2); // [1]
如果指定集合中的所有元素尚未存在(可选操作),则将其添加到此集合中。
System.out.println(s1.addAll(s2)); //true
System.out.println(s1); //[1,2,3]
答案 2 :(得分:0)
我认为你需要与众不同。所以对于集合s1和s2:s1.removeAll(s2)