如何在不改变任何一套的情况下找到2套之间的差异?

时间:2013-12-06 10:55:23

标签: java set

我有2套s1s2一个条件是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]

s1s2都是巨大的,超过10000个元素并且在循环中。所以我不想先将s1复制到s3,然后删除s2

2 个答案:

答案 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是一个懒惰的操作。它返回差异视图。