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

Amo*_*til 7 java collections red-black-tree

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

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

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

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

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

我想提前解释一下.

kap*_*pex 19

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

文件TreeMap.put:

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

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

  • 因此,我们只需让 Comparator 接受 null 并对 null 键进行排序即可。 (2认同)