为什么TreeMap不允许使用null键?

14
我正在尝试理解Java集合框架背后的概念,并遇到了这个问题 - 为什么TreeMap不允许空键?
如果我们尝试将null键添加到TreeMap中,它会引发NullPointerException。
我尝试通过谷歌内部工作原理来了解TreeMap,并发现它使用红黑树算法,但我现在很难理解,正在努力学习。
引用一下:TreeMap是基于红黑树的NavigableMap实现。换句话说,它使用红黑树算法对TreeMap对象键进行排序。
请帮我澄清一下,因为Map接口的其他两个实现允许null作为键,那么为什么TreeMap不允许添加null键?
提前感谢您的解释。

1
你如何对一个 null 值进行排序? - QBrute
相关 - 使树图容忍空值 - Ashish Mathew
2个回答

36

TreeMap 允许 null 键。默认的 自然顺序 比较器会抛出异常。

按照 TreeMap.put 的文档:

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

允许 null 值的最简单方法是使用一个比较器创建 TreeMap,如 Comparator.nullsFirst(Comparator.naturalOrder())Comparator.nullsLast(Comparator.naturalOrder())


2
所以,我们只需要让比较器接受空值并对空键进行排序。 - Amol Patil

1

我曾经认为 Treemap 不允许使用 null 键,但是在使用 java 6 时,我发现我可以在 treemap 中添加第一个具有 null 键的元素,但是在使用 java 8 时,情况并非如此。

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

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接