1.8与1.7相比,TreeMap的实现并没有发生改变。或者说,从1.2版本开始,TreeMap就没有发生过变化。
由于TreeMap的实现没有变化,推荐阅读倪升武博客。
下面我只是来总结一下倪升武的博客中没有提及的或者是我认为比较重要的几点。
一.TreeMap的几个重要特点
- TreeMap内部是使用红黑树结构存储的。
- 一个对象想要成为TreeMap中的key,那么该对象所属的类必须实现Comparable接口,否则抛异常,因为key的寻找是依赖于比较器的实现。
- TreeMap中允许null值作为value,但是不允许null成为key。
下面是关于上面结论的源码:
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check:类型检查,如果key为null的话就会抛出异常
root