我有2套s1
和s2
一个条件是s1 > s2
我的要求是我无法在s1
中进行更改。并找到两组的差异,我们可以使用另一组来存储结果。
Set<String> s1 = new HashSet<String>();
s1.add("a");
s1.add("b");
s1.add("c");
s1.add("n");
s1.add("d");
Set<String> s2 = new HashSet<String>();
s2.add("b");
s2.add("d");
s2.add("c");
我想要像这样的外包
比如s3= set1-set2
输出:
s3=[a,n]
s1
和s2
都是巨大的,超过10000个元素并且在循环中。所以我不想先将s1
复制到s3
,然后删除s2
。
答案 0 :(得分:4)
您可以使用:
Set<String> s3 = new HashSet<String>();
for(String temp : s1){
if(!s2.contains(temp)){
s3.add(temp);
}
}
for (String temp : s2) {
if (!s1.contains(temp)) {
s3.add(temp);
}
}
答案 1 :(得分:3)
使用Google Guava:
import com.google.common.collect.Sets;
Set<String> difference = Sets.difference(s1, s2);
注意,Sets.difference
是一个懒惰的操作。它返回差异视图。