为什么Hashtable不带null钥匙?
null
另外,为什么HashMap允许null键?
使这两个类的键行为如此不同的目的是什么?
从Hashtable JavaDoc:
Hashtable
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无法计算哈希值以将其用作键。
.equals()
.hashCode()
HashMap较新,并且具有更高级的功能,基本上只是对Hashtable功能的改进。这样,在HashMap创建时,它专门设计为将null值作为键来处理,并将它们作为特殊情况来处理。
HashMap
具体来说,null在发出时,像这样处理用作键.get(key):
.get(key)
(key==null ? k==null : key.equals(k))