为什么Hashmap允许空键?

y2k*_*y2k 2 java collections hashmap

实际上我读了很多关于这个问题的帖子,但没有得到确切原因/答案为什么Hashmap允许空键?.请问任何人都可以通过一个例子向我解释确切的答案.提前致谢.

Ste*_*n C 10

您对问题的一种解释:

为什么hashmap允许[只]一个空键?

问问自己:如果HashMap允许多个null密钥,地图对象如何区分它们?

提示:只有一个null值.


您问题的替代解释

为什么hashmap允许[a] null键?

因为它在某些情况下很有用,并且因为没有真正的语义需要不允许它1,2.

相比之下,TreeMap null不允许使用密钥,因为考虑到订单的含义,支持它们会很困难null.

  • 鉴于指定的语义Comparable是抛出NPE.
  • Comparator允许订购null,但它并不需要.许多常见的实现都没有.

因此,如果null允许TreeMap,则地图的行为可能会有所不同,具体取决于是否使用了a Comparator或a Comparable.乱.


1 - 至少,这是他们HashMap在1998年在Java 1.2中指定的视图.从那时起,一些设计师可能已经改变了主意,但由于行为明确指定,因此在不破坏兼容性的情况下无法更改.它不会发生......

2 - 对null密钥的支持需要一些特殊的案例代码,HashMap其中至少增加了实现的复杂性.目前尚不清楚它是否是性能开销HashMap,因为null即使null不允许使用密钥,仍然需要对密钥进行隐式测试.这很可能是噪音.