获得两套之间的差异

所以如果我有两套:

Set<int> test1 = new HashSet<Integer>(); test1.add(1); test1.add(2); test1.add(3); Set<int> test2 = new HashSet<Integer>(); test2.add(1); test2.add(2); test2.add(3); test2.add(4); test2.add(5); 

有没有办法比较他们,只有一组4和5返回?

尝试这个

 test2.removeAll(test1); 

集#的removeAll

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

如果您使用Guava(以前的Google Collections)库,有一个解决scheme:

 SetView<Number> difference = com.google.common.collect.Sets.difference(test2, test1); 

返回的SetView是一个Set ,它是一个实时表示,你可以使不可变的或复制到另一个集合。 test1test2保持不变。

是:

 test2.removeAll(test1) 

虽然这会改变test2 ,所以如果你需要保留它,创build一个副本。

另外,你的意思可能是<Integer>而不是<int>

如果你正在使用Java 8,你可以尝试这样的事情:

 public Set<Number> difference(final Set<Number> set1, final Set<Number> set2){ final Set<Number> larger = set1.size() > set2.size() ? set1 : set2; final Set<Number> smaller = larger.equals(set1) ? set2 : set1; return larger.stream().filter(n -> !smaller.contains(n)).collect(Collectors.toSet()); }