所以我有一个关于集合的简单问题。
我最近在编码时发现,无论我将我的空集与什么进行比较(使用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/