我想在HashSet
的多个Integers
中获取所有这些元素,这些元素没有重复项。即所有HashSet
的并集仅出现一次。我无法通过编程将其概念化。
例如,考虑一组首先包含{2,4,6,8,9},第二组包含{2,8,9},第三组包含{2,4,8,9}。在所有这些集合中,元素6仅出现一次。如何在Java的多个Integer HashSet中查找所有没有重复的元素?
最佳答案
您可以保存至少发生一次且至少发生两次的元素集。这是一些手动循环,但有可能。这将适用于任意数量的差异集,并且不会修改输入:
public static Set<E> unique(Set<? extends E>... sets){
Set<E> once = new HashSet<E>();
Set<E> twice = new HashSet<E>();
for(Set<? extends E> set:sets){
for(E el:set){
if(once.contains(el)){
twice.add(el);
} else {
once.add(el);
}
}
}
once.removeAll(twice);
return once;
}
Ideone:http://ideone.com/reGDBy
用法示例:
Set<Integer> set1, set2, set3;
...
Set<Integer> u = unique(set1, set2, set3);
评估示例:
once
包含{2,4,6,8,9},而twice
为空。 once
集中已经有2、8和9,因此它们被添加到twice
集中。 once
现在为{2,4,6,8,9},twice
现在为{2,8,9}。 twice
中,将4添加到twice
中,将8、9重新添加到twice
中。 once
现在为{2,4,6,8,9}(所有集合的联合),twice
现在为{2,4,8,9}(元素至少出现两次)。 twice
中删除once
。 once
现在为{6}。返回once
。