cde*_*zaq 29
来自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.
Run Code Online (Sandbox Code Playgroud)
简而言之,因为null它不是一个对象,所以你不能调用它.equals()或者.hashCode()它,因此Hashtable无法计算哈希值来将它用作键.
HashMap更新,并具有更高级的功能,这基本上只是对Hashtable功能的改进.因此,在HashMap创建时,它专门设计为将null值作为键处理并将其作为特殊情况处理.
具体来说,null在发出以下内容时,像这样处理密钥的使用.get(key):
(key==null ? k==null : key.equals(k))
Run Code Online (Sandbox Code Playgroud)
Hashtable早于集合框架,是JDK 1.0的一部分.那时,空键可能被认为是无用的或不是必需的,因此被禁止.您可能会将其视为设计错误,就像选择名称Hashtable而不是HashTable.
然后,几年后,收集框架,Hashtable稍作修改,以适应框架.但是没有更改null键上的行为以保持向后兼容性.
应该弃用Hashtable,恕我直言.