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”)