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不允许使用密钥,仍然需要对密钥进行隐式测试.这很可能是噪音.