使用HASHSET在两个数组之间查找重复值

时间:2013-05-07 06:49:17

标签: java hashset

我正在尝试创建一个简单的程序来查找两个数组中的重复元素。如果存在重复元素,则返回True,否则返回false。

我写了很多代码,但它总是返回false。

 List<String> list1= new ArrayList<String>();

  list1.add("abc");
  list1.add("xyz");
  list1.add("rst");

 List<String> list2= new ArrayList<String>();

  list2.add("rst");
  list2.add("would");
  list2.add("why");

 Set<String> set1 = new HashSet<String>(list1);
 Set<String> set2 = new HashSet<String>(list2);

 if(set1.contains(set2)){
      System.out.println("exists");
 }else
      System.out.println("doesn't exists");

上面的代码应该打印“exists”,即返回TRUE,但它不会。我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:3)

您要将所有元素添加到list1两次,而不是在第二个实例中添加到list2。这意味着set2将为空,因此两者之间不会有交集。

我也非常怀疑你使用HashSet.contains。你真的不想检查集合交集,而不是set2中是否存在对set1的引用?这看起来不是很好。我建议你想做点什么:

Set<String> intersection = new HashSet<String>(set1);
intersection.retainAll(set2);

if (intersection.size() > 0) {
    // print true
} else {
    // print false
}

答案 1 :(得分:1)

你问set1是否包含整个set2,它不包含。 set1可能在set2中包含元素。您应该使用循环或使用retainAllremoveAll,然后检查新尺寸是否与旧尺寸相同。

答案 2 :(得分:1)

将您的代码更改为

 for (String string : set2) {
           if(set1.contains(string)){
                 System.out.println("exists");
           }else
                 System.out.println("doesn't exists");
           }

打印

doesn't exists
exists
doesn't exists

答案 3 :(得分:0)

Cehck out Set conatins() API

您的代码不会检查set2的每个元素是否可用,而是检查set2对象是否可用。

如果我像这样修改你的代码那么它运行正常:

     set1.addAll(set2);
     if(set1.containsAll(set2)){
          System.out.println("exists");
     }else
          System.out.println("doesn't exists");

要检查string中是否有特定的set2对象,其中一个解决方案是您可以迭代它并单独检查。