0

我正在尝试创建一个简单的程序来查找两个数组中的重复元素。如果存在重复元素,则返回 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

4 回答 4

3

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

我也很怀疑你使用HashSet.contains. 您真的不想检查 set交集,而不是对set2in的引用set1吗?这似乎不是很好的类型。我建议你想做类似的事情:

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

if (intersection.size() > 0) {
    // print true
} else {
    // print false
}
于 2013-05-07T06:51:06.727 回答
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
于 2013-05-07T06:56:27.593 回答
1

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

于 2013-05-07T06:54:26.080 回答
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,解决方案之一可以是遍历它并单独检查。

于 2013-05-07T06:58:27.357 回答