所以我对集合有一个快速的问题。
我最近在编码时发现,无论我将我的空集与(containsAll
方法)进行比较,该方法将始终返回true
。我很好奇......为什么即使我的集合中没有空插槽(例如,{1, 3, 5, , 9}
),每次我将空集与任何其他集进行比较时,它总是返回true
?< / p>
另外,null
怎么不这样做?我理解null
语句也是Java中的对象,但它仍然是“无”或“空/无效”的含义
请参阅我的代码:
import java.util.*;
class Test{
public static void main(String[] args){
Set<Object> tester = new HashSet<Object>();
Set<Object> data1 = new HashSet<Object>();
Set<Object> dataNull = new HashSet<Object>();
tester.add(1); //Adding some random stuff
tester.add(10);
tester.add(0);
dataNull.add(null);
System.out.println(tester.containsAll(data1));
System.out.println(tester.containsAll(dataNull));
}
}
执行时,此处的输出为:
true
false
当询问测试者是否包含空集的所有元素时,我们得到了真实。当询问测试者是否包含仅包含A null
的集合的所有元素时,我们会得到错误。
有任何解释吗?
非常感谢! ~Andrew M
答案 0 :(得分:1)
根据wikipedia definition of subset:
如果A和B是集合并且A的每个元素也是B的元素,那么:
- A是B
的子集(或包含在其中)
换句话说,如果A中没有元素,则A是B的子集。
如果A是空集,则A中没有元素也不在B中,因此空集始终是B的子集。
答案 1 :(得分:0)
当询问测试者是否包含空集的所有元素时,我们都会成真。
因为每个集都包含空集的所有元素,因为空集没有元素。
当询问测试者是否包含ONLY CONTAINING A null的所有元素时,我们会得到错误。
因为该集合不包含null元素,因此它不包含集合的所有元素。