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
的参数,也就是一个HashSet
。 e
是第一个集合的元素,应该是一个Integer
。由于 Integer
和 HashSet
是不相关的类型,因此它们相等的可能性很小。
你这里好像犯了逻辑错误。要检查一个集合是否是另一个集合的超集,请改为调用 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)
。
我正在努力学习 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)
.
o
是你传给contains
的参数,也就是一个HashSet
。 e
是第一个集合的元素,应该是一个Integer
。由于 Integer
和 HashSet
是不相关的类型,因此它们相等的可能性很小。
你这里好像犯了逻辑错误。要检查一个集合是否是另一个集合的超集,请改为调用 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)
。