Java – 允许null作为HashMap密钥的原因?

为什么Java决定允许’null’作为HashMap中的键? 我们知道hashcode()无法在null值上计算。 是否有任何设计考虑因为这个决定允许HashMap中的null键在Hashtable中不存在(除了考虑作为默认值)?

从JDK 1.2 Java Collections API更改摘要 (不确定在Oracle网站上的官方版本的位置):

为HashMap添加了空键支持。 这样做是为了与TreeMap和后期的,没有磨损的ArrayMap保持一致,并且因为客户要求它。 现在我们所有的通用集合实现都接受空键,值和元素。

Joshua Bloch和Doug Lea对此持不同意见 ,这导致了并发哈希映射的问题。