在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);
    }
}