为什么 Hashtable 不采用 null
键?
还有为什么 HashMap 允许 null
键?
使这两个类的 Key 行为如此不同的目的是什么?
最佳答案
来自 Hashtable
JavaDoc :
To successfully store and retrieve objects from a hashtable, the objects used
as keys must implement the hashCode method and the equals method.
简而言之,由于 null
不是对象,因此您不能调用 .equals()
或 .hashCode()
在它上面,因此 Hashtable
无法计算哈希以将其用作键。
HashMap
较新,并具有更高级的功能,基本上只是对 Hashtable
功能的改进。因此,当创建 HashMap
时,它专门设计用于将 null
值作为键处理并将它们作为特殊情况处理。
具体来说,在发出 .get(key)
时,使用 null
作为键是这样处理的:
(key==null ? k==null : key.equals(k))
关于java - 为什么 Hashtable 不带空键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556357/