java - 为什么空集(如 {} 中所示)是所有集合的子集? ( java )

标签 java set compare hashset

所以我有一个关于集合的简单问题。

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

还有,怎么会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

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

有什么解释吗?

非常感谢! 〜安德鲁·M

最佳答案

根据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 的子集。

关于java - 为什么空集(如 {} 中所示)是所有集合的子集? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481429/

相关文章:

svn - 有没有可以逐行合并的比较工具?

python - 根据 python pandas 中的标志拆分列值

java - 如何在 java 上使用诸如 PJSIP 之类的 C 库?

c# - c#中的java静态操作

java - 如何使用 hashMap 设置行颜色?

javascript - 如何为此设置超时?

python - 根据 Python 字典中的键值检查列表中的值

java - 调用 DropBox getAccountInfo() 时出现断言错误

Java Swing : Set starting time on timer and loop it

python - 如何将整个列表的每个元素除以一个常数