为什么空集(如 {} 中)是所有集的子集? (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的子集。
所以我有一个关于集合的快速问题。
我最近在编码时发现,无论我将我的空集与什么进行比较(使用 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的子集。