在Java中的多个整数哈希集中查找所有没有重复项的元素
在在Java中的多个整数哈希集中查找所有没有重复项的元素,java,set,Java,Set,在整数的多个HashSet中,我想要得到所有那些没有重复的元素。i、 e.在所有哈希集的联合中只出现一次。我无法以编程的方式将其概念化。 作为一个例子,考虑集合第一包含{2,4,6,8,9},第二集合包含{2,8,9},第三集合包含{2,4,8,9}。在所有这些集合中,元素6只出现一次。如何在Java中的多个整数哈希集合中找到所有没有重复的元素?您可以保留至少出现一次和至少两次的元素集合。这是一个有点手动循环,但这是可能的。这将适用于任何数量的差异集,并且不会修改输入: public stati
整数的多个HashSet
中,我想要得到所有那些没有重复的元素。i、 e.在所有哈希集的联合中只出现一次。我无法以编程的方式将其概念化。
作为一个例子,考虑集合第一包含{2,4,6,8,9},第二集合包含{2,8,9},第三集合包含{2,4,8,9}。在所有这些集合中,元素6只出现一次。
如何在Java中的多个整数哈希集合中找到所有没有重复的元素?您可以保留至少出现一次和至少两次的元素集合。这是一个有点手动循环,但这是可能的。这将适用于任何数量的差异集,并且不会修改输入:
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;
}
publicstaticset-unique(Set创建一个多集,并在其中迭代,拉出计数为1的所有元素。O(n)
publicstaticvoidmain(String[]args){
HashSet set1=新的HashSet();
set1.添加(2);
set1.添加(4);
set1.添加(6);
set1.添加(8);
set1.添加(9);
HashSet set2=新的HashSet();
set2.添加(2);
set2.添加(8);
set2.添加(9);
HashSet set3=新的HashSet();
set3.添加(2);
set3.添加(4);
set3.添加(8);
set3.添加(9);
set1.移除所有(set2);
set1.移除所有(set3);
系统输出打印项次(set1);
}
创建两个新的哈希集如何。名为seenOnce和seenMorethenon
然后在不同的哈希映射中迭代所有整数
For each integer:
If it is in seenMoreThenOnce do nothing.
else If it is in seenOnce, remove it from seenOnce and add it to seenMoreThenOnce
Else add it to seenOnce.
迭代完所有HashMap后,seenOnce将包含只看到一次的整数。您可以使用contains()
方法进行此操作。首先,从所有其他集合中创建一个新的HashSet。然后迭代此集合并检查其他集合是否包含()
指定的元素。如果两个或多个列表包含该元素,则您有一个重复的元素,可以继续
。例如,如果只有一个集合包含该元素,您可以将其存储在不同的结果集中
我编写了一个实用方法来实现您需要的功能:
public static <E> HashSet<E> uniques(HashSet<E>... sets){
HashSet<E> everything = new HashSet<E>();
for(HashSet<E> set : sets){
everything.addAll(set);
}
HashSet<E> uniques = new HashSet<E>();
for(E e : everything){
int count = 0;
for(HashSet<E> set : sets){
if(set.contains(e)){
count++;
}
if(count > 1){
break;
}
}
if(count == 1){
uniques.add(e);
}
}
return uniques;
}
公共静态HashSet uniques(HashSet…set){
HashSet everything=新HashSet();
for(HashSet:set){
一切。添加全部(集合);
}
HashSet uniques=新的HashSet();
对于(E:一切){
整数计数=0;
for(HashSet:set){
if(集合包含(e)){
计数++;
}
如果(计数>1){
打破
}
}
如果(计数=1){
增加(e);
}
}
返回单号;
}
使用中间版本的版本:
@SafeVarargs
公共静态集合统一元素(集合<代码>公共类测试{
公共静态void main(字符串[]args)引发异常,IOException{
整数计数=0;
HashSet set1=新的HashSet();
HashMap ee=新的HashMap();
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“要存储多少元素”);
int n=Integer.parseInt(br.readLine());
System.out.println(“输入要插入的元素”);
对于(int i=0;i您有一组集合,或者有一个确定的集合数?那么您想要的最终答案是6…对吗?@FahimParkar:是的,对于上面的示例,ans是6。@JanDvorak:我有多个(确定的计数)集合,其中包含整数元素。关于集合2中出现的元素,而不是集合1中出现的元素呢?请看。我从集合1到集合2取了6,上面的失败了……因此,对于每个集合中的每个元素,如果没有其他集合包含它,则返回该元素?@JanDvorak或将其存储在结果集中,这并不重要。我担心我的方法更快。@JanDvorak-我很抱歉您发现顺序错误;已修复。@JanDvorak-完全没有问题。感谢您调试我的答案。您能用三个列表来演示此示例吗?OP有3个集合…2个集合更简单…@FahimParkar修改为使用varargs并添加了一个示例。@JanDvorak:我认为您需要更改public Set unique(Collection@JanDvorak:您修改的post中有一个小更改。在第一个内部循环完成后,一旦包含{2,4,6,8,9}Twops是空的。
。你能编译并共享你的代码吗?我将向ideone添加一个测试用例。这比吗?不管怎样,我将使用所描述的代码。好吧,这段代码需要在你的项目中有一个额外的库,所以如果你已经在使用Guava,你可能会更喜欢它。否则,请坚持使用简单的方法JDK。
For each integer:
If it is in seenMoreThenOnce do nothing.
else If it is in seenOnce, remove it from seenOnce and add it to seenMoreThenOnce
Else add it to seenOnce.
public static <E> HashSet<E> uniques(HashSet<E>... sets){
HashSet<E> everything = new HashSet<E>();
for(HashSet<E> set : sets){
everything.addAll(set);
}
HashSet<E> uniques = new HashSet<E>();
for(E e : everything){
int count = 0;
for(HashSet<E> set : sets){
if(set.contains(e)){
count++;
}
if(count > 1){
break;
}
}
if(count == 1){
uniques.add(e);
}
}
return uniques;
}
@SafeVarargs
public static <E> Set<E> uniqueElements(Set<? extends E>... sets) {
final Multiset<E> multiset = HashMultiset.create();
for (Set<? extends E> set : sets) {
multiset.addAll(set);
}
return Sets.filter(multiset.elementSet(), new Predicate<E>() {
@Override
public boolean apply(E element) {
return multiset.count(element) == 1;
}
});
}
public class test {
public static void main(String[] args) throws Exception, IOException {
int count=0;
HashSet<Integer> set1 = new HashSet<Integer>();
HashMap<Integer, String> ee=new HashMap<Integer,String>();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("how many elements u want to store");
int n=Integer.parseInt(br.readLine());
System.out.println("enter te element u want insert");
for(int i=0;i<n;i++)
{
boolean x=set1.add(Integer.parseInt(br.readLine()));
if(x==false)
{
count++;
}
}
System.out.println("no of duplicate elements is "+count);
}
}