【问题标题】:What does `putForNullKey` method do inside the `put` method in hashmap?`putForNullKey` 方法在 hashmap 的`put` 方法中做了什么?
【发布时间】:2013-04-22 16:59:08
【问题描述】:
【问题讨论】:
标签:
java
collections
hashmap
【解决方案1】:
HashMap 只允许一个空键。因此,每当有人想将某个值放入 null 时,它会在 put 方法中调用 putForNullKey 方法,并在 putForNullKey 方法中将值放在零索引处。
为了通过 null 键获取值,它还有一个 getForNullKey 方法,它从 get 方法内部调用。
【解决方案2】:
来自 HashMap 的 Javadoc:
Hash table based implementation of the Map interface.
This implementation provides all of the optional map
operations, and permits null values and the null key
这是设计使然,并且已记录在案。 “为什么”的问题很难回答,但自从 HashMap(以及在此之前,Hashtable)被引入以来就是这样(编辑,实际上,Hashtable 不允许空值)。
至于为什么它有 putForNullKey,那么 HashMap 依赖于 key 的 hashCode() 来放置它,并且由于它无法从 null 值中获取 hashCode(),所以它必须作为一个特殊情况。
【解决方案3】:
这是Hashtable 和HashMap 之间的区别之一。
Hashtable 不允许空键或空值。 HashMap 允许一个空键和任意数量的空值。
通常,我们使用 null 键来表示默认情况(即,如果给定键不存在时应使用的值)