我试图理解Java Collection框架背后的概念,并提出了一个问题——为什么TreeMap中不允许空键?
如果我们试图在TreeMap中添加空键,就会产生NullPointerException。
尝试谷歌TreeMap的内部工作,发现TreeMap使用RedBlack树算法,这对我来说很难理解,我正在努力。
TreeMap是一个基于红黑树的NavigableMap实现。换句话说,它使用红黑树算法对TreeMap对象键进行排序。
请清除我,虽然Map接口的其他两个实现允许null作为键,那么为什么TreeMap不允许添加null作为键呢?
我想提前感谢你的解释。
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>();