java - `putForNullKey`方法在hashmap的 `put`方法内部做了什么?

标签 java collections hashmap

今天我在修复一个缺陷,发现了一件很有趣的事情。

我试图将键值对放入 HashMap 中。 (我假设 key 在那里,但后来发现它是空的)。

因此,在使用键检索值时,我并不是每次都得到 null。

后来发现key是null,改正了

但后来我看到了 Hashmapput 方法的代码。

为什么当 keynull 时不抛出异常?

它调用putForNullKey 私有(private)方法。它有什么作用?

但我认为如果键为空,它应该给出一些异常(exception)。

为什么他们没有那样实现? 如果键为空,键值对就没用了吗?

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java#HashMap.putForNullKey%28java.lang.Object%29

最佳答案

来自 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 依赖于一个键的 hashCode() 来放置它,并且由于它不能从空值中获取 hashCode(),它必须作为一个特例。

关于java - `putForNullKey`方法在hashmap的 `put`方法内部做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16152596/

相关文章:

java - 在所有方法调用上允许类型见证有什么意义?

java - 访问 Executor Service Future 列表时出现 ConcurrentModificationException

c# - IList<T> 和 IReadOnlyList<T>

javascript - React 从列表键中提取值

java - org.openqa.selenium.webelement 到 org.w3c.dom.domelement?

java - 错误 : mediaplayer start called in state 0 error(-38, 0)

java -/WEB-INF/类与/WEB-INF/lib

java - AbstractCollection 类中的 Add() 方法

java - 不能对 HashMap 中的每个

java - 漏洞 : parameter 'initialCapacity' of ConcurrentHashMap's construct method?