[英]HashSet.contains is returning false while it should not
我正在尝试学习Java,并且达到了HashSet部分,总而言之,我正在测试contain方法。
public static void main(String[] args) {
HashSet<Integer> firstSet = new HashSet<>();
firstSet.add(3);
HashSet<Integer> secondSet = new HashSet<>();
secondSet.add(3);
boolean var = firstSet.contains(secondSet);
System.out.println(var);
}
我相信这段代码应该返回true,而返回false。 任何帮助!
让我们看看contains
的文档 :
如果此集合包含指定的元素,则返回true。 更正式地说,当且仅当此集合包含元素e使得
(o==null ? e==null : o.equals(e))
,返回true。
由于我们都知道这里没有空值,因此可以说,如果o.equals(e)
, contains
将返回true。
o
是您传递给contains
的参数,它是HashSet
。 e
是第一个集合的元素,应该是Integer
。 由于Integer
和HashSet
是不相关的类型,因此它们相等的可能性很小。
您似乎在这里犯了逻辑错误。 要检查一个集合是否是另一个集合的超集,请调用containsAll
:
如果此集合包含指定集合中的所有元素,则返回true。
boolean var = firstSet.contains(secondSet);
这行引起了问题,因为您没有检查secondSet
中特定元素的存在,而是检查firstSet
将整个 secondSet
本身存储了,这显然是错误的。
例如,您应该检查是否. contains(secondSet.get(0))
. contains(secondSet.get(0))
或.contains(3)
。
如果你的目的是检查是否firstSet
包含所有存在于所有元素secondSet
,你可以使用firstSet.containsAll(secondSet)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.