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

Why is an Empty Set, as in {}, a subset of all sets? (Java)

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

我最近在编码时发现,无论我将我的空集与什么进行比较(使用 containsAll 方法),该方法总是 return true。我很好奇......怎么会,即使我的集合不包含空槽(例如,{1, 3, 5, , 9})每次我将一个空集合与任何其他集合进行比较时,它总是 returns true?

还有,null为什么不这样做呢?我知道 null 语句也是 Java 中的对象,但它仍然是 "nothing" 或 "empty/void"

的表示

查看我的代码:

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

当询问测试器是否包含空集的所有元素时,我们得到 true。当询问测试器是否包含集合中仅包含 A null 的所有元素时,我们得到 false。

有什么解释吗?

非常感谢! ~安德鲁·M

When asking if the tester contains all elements of the empty set, we get true.

因为每个集合都包含空集的所有元素,因为空集没有元素

When asking if the tester contains all elements of the set ONLY CONTAINING A null, we get false.

因为集合不包含空元素,所以它不包含集合的所有元素。

根据 wikipedia definition of subset:

If A and B are sets and every element of A is also an element of B, then:

  • A is a subset of (or is included in) B

换句话说,A 是 B 的子集当且仅当 A 中没有不在 B 中的元素。

如果A是空集,那么A中没有不在B中的元素,所以空集总是B​​的子集。