TreeMap底层基于红黑树,以下是源代码,先指定一个根节点,若该根节点不存在,则说明TreeMap里面没有元素,将当前准备加入的元素(Entry)加入进去当成根节点。
如果里面已经 存在元素,再判断是否TreeMap是否含有比较器,如果比较器不为空,就按照比较器的比较方法进行比较,如果为空,按照该(key)自己的内部的自然顺序进行
比较,前提是该key是有比较性的,否则,需要将该类继承comparable并重写compareTo方法,使之具有比较性。TreeSet底层就是一个TreeMap,但是Value值为一个虚拟值。因此原理跟TreeMap一致。
public V put(K key, V value) {
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;
}
int cmp;
Entry<K,V> parent;
// split comparator and comparable paths
Comparator<? super K> cpr = comparator;
if (cpr != null) {