问题描述:我们都知道 HashMap是可以存储null值null键的。那么TreeMap可以么?
首先我们看是否可以存储null值,代码如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
这样运行结果是没有问题的。可以正常输出null
那么null键呢?修改代码如此下:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Exception in thread “main” Java.lang.NullPointerException
这样的话 ts.put(null, 3); 这一行程序报了空指针异常。
首先明确String类是实现了Comparable接口的。因此TreeMap无需我们传入比较器。这里报了空指针是因为存入数据的时候,put方法调用了String类的compareTo方法,而这时候,其为null,调用其compareTo方法会发生空指针异常。
那么,在明白了put方法底层之后,我们可以传入比较器,以实现强制其存储null键。代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
在TreeMap中传入比较器,put方法优先调用比较器,因而在s1 == null时强制其返回1,即可实现存储null键。但这时并不能使用get(键)的方法去获取值
仅能通过如下方式去遍历获取键值对
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4