提问者:小点点

为什么树图中不允许空键?


我试图理解Java Collection框架背后的概念,并提出了一个问题——为什么TreeMap中不允许空键?

如果我们试图在TreeMap中添加空键,就会产生NullPointerException。

尝试谷歌TreeMap的内部工作,发现TreeMap使用RedBlack树算法,这对我来说很难理解,我正在努力。

TreeMap是一个基于红黑树的NavigableMap实现。换句话说,它使用红黑树算法对TreeMap对象键进行排序。

请清除我,虽然Map接口的其他两个实现允许null作为键,那么为什么TreeMap不允许添加null作为键呢?

我想提前感谢你的解释。


共2个答案

匿名用户

TreeMap确实允许空键。默认的自然排序比较器是引发异常的比较器。

TreeMap.put的留档:

< code > NullPointerException -如果指定的键为空,并且此映射使用自然排序,或者其比较器不允许空键

允许空值的最简单方法是使用比较器创建TreeMap,如comparator.nullsFirst(comparator.unaturalOrder())comparator.nullsLast(comparator.unaturalorder())

匿名用户

我有同样的印象,认为< code>Treemap不允许任何空键,但在使用< code>java 6时,我发现我可以在Treemap中添加带有< code>null键的第一个元素,但在< code>java 8中却不是这样。

 Map<String, Date> productStartDatesBySourceProductID = new TreeMap<String, Date>();