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);

}

我认为这段代码应该 return 正确,而 return 错误。任何帮助!

让我们看看 docs for contains:

Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e)).

因为我们都知道这里没有空值,所以我们可以说 contains 如果 o.equals(e).

将 return 为真

o是你传给contains的参数,也就是一个HashSete是第一个集合的元素,应该是一个Integer。由于 IntegerHashSet 是不相关的类型,因此它们相等的可能性很小。

你这里好像犯了逻辑错误。要检查一个集合是否是另一个集合的超集,请改为调用 containsAll

Returns true if this collection contains all of the elements in the specified collection.

boolean var = firstSet.contains(secondSet);

这一行导致了问题,因为您没有检查 secondSet 中特定元素的存在,而是检查 firstSet 是否存储了 整个 secondSet 本身,这显然是错误的。

您应该已经检查过,例如,如果它 . contains(secondSet.get(0)).contains(3)

如果您的目的是检查 firstSet 是否包含 secondSet 中存在的所有元素,您可以使用 firstSet.containsAll(secondSet)