TreeMap底层的数据结构就是一颗红黑树。
TreeMap是一个有序的key-value集合,因为他的底层数据结构通过红黑树实现的。
值得一提的是,当HashMap的一条链表长度大于8时,会自动转为红黑树,
这时候哈希映射到那个索引下的元素也是有序排列的。
初始化推迟到put添加元素时。
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
重写了hashcode,允许了键值为null
public int hashCode() {
int keyHash = (key==null ? 0 : key.hashCode());
int valueHash = (value==null ? 0 : value.hashCode());
return keyHash ^ valueHash;
}
其他的只要你理解了红黑树,就和看红黑树没什么区别。
但是TreeMap最核心的是它可以自定义排序规则。主要通过构造器传入的参数
//1.
public TreeMap() {
comparator = null;
}
//2.
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
//3.
public TreeMap(Map<? extends K, ? extends V> m) {
comparator = null;
putAll(m);
}
//4.
public TreeMap(SortedMap<K, ? extends V> m) {
comparator = m.comparator();
try {
buildFromSorted(m.size(), m.entrySet().iterator(), null, null);
} catch (java.io.IOException cannotHappen) {
} catch (ClassNotFoundException cannotHappen) {
}
}