This question already has answers here:
ContainsAll List Java

(5个答案)


4年前关闭。




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

我最近在编码时发现,无论我将一个空的矿山与(使用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


当询问测试器是否包含空集合的所有元素时,我们得到了真。当询问测试人员是否包含该集合的所有元素仅包含A null时,我们将得到错误的结果。

有什么解释吗?

万分感谢!
〜安德鲁·M

最佳答案

根据wikipedia definition of subset


如果A和B是集合,并且A的每个元素也是B的元素,则:


A是B的子集(或包含在B中)



换句话说,A是B的子集,前提是A中没有元素,B中也没有元素。

如果A是空集,则A中没有元素,B中也没有元素,因此空集始终是B的子集。

07-24 02:05