概述
1.非同步;
2.TreeMap实现了NavigableMap接口,而NavigableMap接口继承着SortedMap接口,所以TreeMap是有序的;
3.TreeMap底层是红黑树,它方法的时间复杂度都不会太高:log(n);
4.TreeMap的构造器可以接受一个Comparator参数用以决定key的顺序,如果没有指定,那么尝试将key强转为Comparable,如果转换失败那就抛出异常了;Comparator和Comparable出现的频率是很高的,因为TreeMap实现有序要么就是外界传递进来Comparator对象,要么就使用默认key的Comparable接口(实现自然排序)
TreeMap的域值
/**
* 如果为null,则使用自然顺序排序
*/
private final Comparator<? super K> comparator;
//红黑树的根节点
private transient Entry<K,V> root;
/**
* 红黑树的大小
*/
private transient int size = 0;
/**
* 结构性修改的次数
*/
private transient int modCount = 0;
构造函数
public TreeMap() {
//TreeMap有序是通过Comparator来进行比较的,如果comparator为null,那么就使用自然顺序
comparator = null;
}
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
public TreeMap(Map<? extends K, ? extends V> m) {
comparator = null;
putAll(m); //将Map转换为TreeMap
}
public TreeMap(SortedMap<K, ? extends V> m) {
comparator = m.comparator();
try {
//SortMap需要使用该函数来转换
buildFromSorted(m.size(), m.entrySet().iterator(), null, null);
} catch (java.io.IOException cannotHappen) {
} catch (ClassNotFoundException cannotHappen) {
}
}
put方法
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); //判断key是否是空类型
//红黑树为null,则新建红黑树
root = new Entry<>(key, value, null);
size = 1;
mo