我正在尝试创建一个简单的程序来查找两个数组中的重复元素。如果存在重复元素,则返回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,但它不会。我在这里错过了什么吗?
答案 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中包含元素。您应该使用循环或使用retainAll
或removeAll
,然后检查新尺寸是否与旧尺寸相同。
答案 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)
您的代码不会检查set2
的每个元素是否可用,而是检查set2
对象是否可用。
如果我像这样修改你的代码那么它运行正常:
set1.addAll(set2);
if(set1.containsAll(set2)){
System.out.println("exists");
}else
System.out.println("doesn't exists");
要检查string
中是否有特定的set2
对象,其中一个解决方案是您可以迭代它并单独检查。