Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中list和map如何处理空元素_Java_List_Map - Fatal编程技术网

Java中list和map如何处理空元素

Java中list和map如何处理空元素,java,list,map,Java,List,Map,对于以下输出,什么是合理的? 列表和映射对空元素的处理方式不同 List<Object> hoo = new ArrayList<Object>() { { add(null); add(null); } }; Map<Object, Object> bar = new HashMap<Object, Object>() { { put(null, 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());

HashMap
不允许使用重复键存储值(在本例中,值为null)。这就是第二种情况下大小为“1”的原因。

HashMap
不允许使用重复键存储值(在这种情况下,值为null)。这就是第二种情况下大小为“1”的原因。

因为
映射只能有唯一键。在这种情况下,它是一个
null

put(null, null);
put(null, null);
put(null, null);

前面的语句实际上是在第一次调用后覆盖该值。这就是为什么大小保持为1的原因,因为
贴图只能有唯一的键。在这种情况下,它是一个
null

put(null, null);
put(null, null);
put(null, null);
前面的语句实际上是在第一次调用后覆盖该值。这就是为什么大小保持为1的原因,表示:

如果映射以前包含键的映射,则旧值 被取代

条:1
完全正确。

说明:

如果映射以前包含键的映射,则旧值 被取代


bar:1
是完全正确的。

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

对于您更一般的问题(这些接口如何处理重复项的逻辑),答案是没有任何一种“更多”或“更少”的逻辑方式来实现映射中的空约束

当然,没有普遍的规则:例如- 最初,java的哈希表不允许空值。
但是后来,HashMap实现了一种不同的行为(允许空值)


因为现实世界中确实存在可以使用空值的实例,但是很少有实例可以/应该使用空键,你可能会问自己,为什么在同一个数据结构中有多个带有null键和null值的条目?这些值实际上代表了什么有意义的东西吗?

具体地说:列表可以有重复的项,但映射不能有重复的键,这就是为什么我们可以在列表中有两个null,但在映射中只有一个null

对于您更一般的问题(这些接口如何处理重复项的逻辑),答案是没有任何一种“更多”或“更少”的逻辑方式来实现映射中的空约束

当然,没有普遍的规则:例如- 最初,java的哈希表不允许空值。
但是后来,HashMap实现了一种不同的行为(允许空值)


由于现实世界中确实存在可以使用空值的实例,但很少有我们会/应该使用空键的实例,您可能会问自己,为什么在同一数据结构中有多个具有空键和空值的条目-这些值实际上代表了什么有意义的东西吗?

您会期望什么?对于任何一个非空对象,您也会看到同样的情况。列表和映射(显然)对相等值的处理是不同的,仅此而已。您会期望什么?对于任何一个非空对象,您也会看到同样的情况。列表和映射(显然)对相等值的处理不同,仅此而已。+1。与null无关,真的。同样的事情也会发生在
add(“a”)
+1上。与null无关,真的。同样的事情也会发生在
add(“a”)