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

2022-09-04 06:39:39

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

如果我们尝试在TreeMap中添加空键,它会给出NullPointerException。

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

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

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

我要感谢提前的解释。


答案 1

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

以下文档TreeMap.put

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

允许空值的最简单方法是使用比较器创建,例如或TreeMapComparator.nullsFirst(Comparator.naturalOrder())Comparator.nullsLast(Comparator.naturalOrder())


答案 2

我的印象是不允许任何空键,但是在使用时,我发现我可以在树状图中添加具有key的第一个元素,但事实并非如此。Treemapjava 6nulljava 8

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

enter image description here