Java中的列表和映射如何处理null元素

Moh*_*rma 1 java list map

低于产量可以合理的是什么?列表和映射对null元素的处理方式不同.

List<Object> hoo = new ArrayList<Object>() {
    {
        add(null);
        add(null);
    }
};

Map<Object, Object> bar = new HashMap<Object, Object>() {
    {
        put(null, null);
        put(null, null);
        put(null, null);

    }
};
System.err.println("hoo:" + hoo.size());
System.err.println("bar:" + bar.size());
Run Code Online (Sandbox Code Playgroud)

输出:

hoo:2
bar:1
Run Code Online (Sandbox Code Playgroud)

jay*_*100 9

具体来说:列表可以有重复的项目,但是映射不能有重复的键,这就是为什么我们可以在列表中有2个空值但在映射中只有一个空值.

您更普遍的问题(这些接口如何处理重复的逻辑)的答案是,没有任何一种"更多"或"更少"的逻辑方式来实现地图中的空约束.

当然,不存在普遍规律:例如-原来,Java的哈希表没有允许空值.
但后来,HashMap实现了不同的行为(允许空值).

因为现实世界肯定有我们可以有空值的实例,但是我们应该/应该有一个空键的实例很少,你可能会问你自己为什么你有多个带有空键和空值的空值数据结构 - 这些值实际上代表什么有意义的?