文章目录
1、主要的成员变量及构造
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable {
private final Comparator<? super K> comparator;
private transient Entry<K,V> root;
private transient int size = 0;
private transient int modCount = 0;
private static final boolean RED = false;
private static final boolean BLACK = true;
private transient EntrySet entrySet;
private transient KeySet<K> navigableKeySet;
private transient NavigableMap<K,V> descendingMap;
private static final Object UNBOUNDED = new Object();
public TreeMap() {
comparator = null;
}
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
public TreeMap(Map<? extends K, ? extends V> m) {
comparator = null;
putAll(m);
}
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) {
}
}
..............................
}
2、put添加元素
先创建一个TreeMap实例
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<Object, Object> treeMap = new TreeMap<>();
treeMap.put("aa","11");
treeMap.put("bb","22");
treeMap.put("cc","44");
treeMap.put("dd","33");
treeMap.put("ee","10");
}
}
put添加元素执行的流程
// 由于添加的键和值都是String类型的,且初始化创建实例指定的泛型类型都为Object,String也是Object的子类
public V put(K key, V value) {
// 默认初始的时候null
Entry<K,V> t = root;
// 判断根节点是否为null
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
......................
}
第一次添加元素,需要执行的compare(key, key)方法
final int compare(Object k1, Object k2) {
return comparator==