HashSet.contains返回false,而不应该返回false

时间:2017-12-08 21:04:06

标签: java hashset

我正在尝试学习Java,并且我到达了HashSet部分,长话短说我正在测试包含方法。

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。任何帮助!

2 个答案:

答案 0 :(得分:4)

让我们看看contains的{​​{3}}:

  

如果此set包含指定的元素,则返回true。更正式地说,当且仅当此集合包含元素e (o==null ? e==null : o.equals(e))

时才返回true

由于我们都知道此处没有空值,因此contains可以说o.equals(e)将返回true。

o是您传递给contains的参数,即HashSete是第一个集合的元素,应该是Integer。由于IntegerHashSet是不相关的类型,因此它们不太可能相等。

你似乎在这里犯了一个逻辑错误。要检查某个集是否是另一个集的超集,请改为呼叫docs

  

如果此集合包含指定集合中的所有元素,则返回true。

答案 1 :(得分:2)

boolean var = firstSet.contains(secondSet);

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

例如,您应该选中. contains(secondSet.get(0)).contains(3)

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