java - 为什么 Hashtable 不带空键?

标签 java collections

为什么 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/

相关文章:

java - 在 Mac 上为我的 Java 7 应用程序创建包安装

c# - Java Runtime Environment 与.NET Framework 在编译过程方面相比如何?

scala - 如何跳过在 map Scala 中附加一些条件?

java - LinkedHashMap 是如何工作的?

java - 数组作为适当的对象

java - 实现 Java 注释进行验证

java - 为什么数组列表动态增加而不是动态减少

swift - 集合之间的通用迭代

java - 有没有办法在 Java 中随机获取 HashMap 的值?

java - 包含 ListView 的动态导航选项卡数量