繁体   English   中英

HashSet.contains返回false,但不应返回

[英]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 由于IntegerHashSet是不相关的类型,因此它们相等的可能性很小。

您似乎在这里犯了逻辑错误。 要检查一个集合是否是另一个集合的超集,请调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM