为什么空集在{}中是所有集的子集? (JAVA)

时间:2016-04-07 15:57:57

标签: java set compare hashset

所以我对集合有一个快速的问题。

我最近在编码时发现,无论我将我的空集与(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

2 个答案:

答案 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元素,因此它不包含集合的所有元素。