我正在尝试学习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。任何帮助!
答案 0 :(得分:4)
让我们看看contains
的{{3}}:
如果此set包含指定的元素,则返回true。更正式地说,当且仅当此集合包含元素e
时才返回true(o==null ? e==null : o.equals(e))
。
由于我们都知道此处没有空值,因此contains
可以说o.equals(e)
将返回true。
o
是您传递给contains
的参数,即HashSet
。 e
是第一个集合的元素,应该是Integer
。由于Integer
和HashSet
是不相关的类型,因此它们不太可能相等。
你似乎在这里犯了一个逻辑错误。要检查某个集是否是另一个集的超集,请改为呼叫docs:
如果此集合包含指定集合中的所有元素,则返回true。
答案 1 :(得分:2)
boolean var = firstSet.contains(secondSet);
此行导致此问题,因为您未检查secondSet
中特定元素的存在,您检查firstSet
存储整个 secondSet
本身,这显然是错误的。
例如,您应该选中. contains(secondSet.get(0))
或.contains(3)
。
如果您打算检查firstSet
是否包含secondSet
中包含的所有元素,则可以使用firstSet.containsAll(secondSet)
。