在前面两篇随笔中,我们提到过,当HashMap的桶过大的时候,会自动将链表转化成红黑树结构,当时一笔带过,因为我们将留在本章中,针对TreeMap进行详细的了解。
下面先让我们来看一下TreeMap的继承关系,对它有一个大致的了解:
可以看到,除了在之前HashMap里常见的继承类和接口以外,TreeMap实现了NavigableMap接口,而NavigableMap继承自SortedMap,由名字可以看出,只是一个用来实现排序的接口。而这也是为什么TreeMap能够实现排序的原因。由于篇幅关系,将TreeMap的源码解析分为三部分,本章将对接口NavigableMap以及SortedMap进行解析。
public interface SortedMap<K,V> extends Map<K,V> { //返回用于对键的进行排序的比较器,如果此映射使用其键的自然排序,则为null Comparator<? super K> comparator(); //返回从fromKey(包括)到toKey(不包括)之间的map SortedMap<K,V> subMap(K fromKey, K toKey); //返回小于toKey的map SortedMap<K,V> headMap(K toKey); //返回大于或等于fromKey的map SortedMap<K,V> tailMap(K fromKey); //返回map中第一个(最低)键 K firstKey(); //返回map中最后一个(最高)键 K lastKey(); Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); }