在多HashSet的Integers我想所有这些因素,其中有没有重复的.也就是说,它只在所有的联合中出现过一次HashSet.我无法以编程方式对其进行概念化.
例如,考虑set首先包含{2,4,6,8,9},第二个包含{2,8,9},第三个包含{2,4,8,9}.在所有这些集合中,元素6仅出现一次.
如何在Java中找到多个HashSet of Integers中没有重复的所有元素?
您可以保存至少出现一次且至少出现两次的元素集.这是一个手动循环,但它是可能的.这将适用于任意数量的集合,并且不会修改输入:
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;
}
Run Code Online (Sandbox Code Playgroud)
Ideone:http://ideone.com/reGDBy
用法示例:
Set<Integer> set1, set2, set3;
...
Set<Integer> u = unique(set1, set2, set3);
Run Code Online (Sandbox Code Playgroud)
评估示例:
例如,考虑set首先包含{2,4,6,8,9},第二个包含{2,8,9},第三个包含{2,4,8,9}.在所有这些集合中,元素6仅出现一次.
once包含{2,4,6,8,9}并twice为空.once集合中,因此它们被添加到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.| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |