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

时间:2018-02-08 14:28:12

标签: java collections red-black-tree

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

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

尝试google TreeMap的内部工作,发现像TreeMap这样的东西使用的RedBlack树算法现在很难理解,我正在研究它。

  

TreeMap是一个基于红黑树的NavigableMap实现。另一个   单词,它使用红黑树对TreeMap对象键进行排序   算法

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

我想提前解释一下。

2 个答案:

答案 0 :(得分:19)

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

来自TreeMap.put的{​​{3}}:

  

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

允许空值的最简单方法是使用TreeMapComparator.nullsFirst(Comparator.naturalOrder())

等比较器创建Comparator.nullsLast(Comparator.naturalOrder())

答案 1 :(得分:0)

我的印象是Treemap不允许使用任何空键,但是在使用java 6时,我发现可以使用null键在树形图中添加第一个元素,但是对于java 8,情况并非如此。

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

enter image description here