集合框架-TreeSet的add()方法的原始碼解析
interface Collection {...}
interface Set extends Collection {...}
interface NavigableMap {
}
class TreeMap implements NavigableMap {
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) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
else {
if (key == null)
throw new NullPointerException();
Comparable<? super K> k = (Comparable<? super K>) key;
do {
parent = t;
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
Entry<K,V> e = new Entry<>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
parent.right = e;
fixAfterInsertion(e);
size++;
modCount++;
return null;
}
}
class TreeSet implements Set {
private transient NavigableMap<E,Object> m;
public TreeSet() {
this(new TreeMap<E,Object>());
}
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
}
/*
真正的比較是依賴於元素的compareTo()方法,而這個方法是定義在 Comparable裡面的。
所以,你要想重寫該方法,就必須實現Comparable介面。這個介面表示的就是自然排序。
*/
相關文章
- 集合框架-HashSet集合的add()方法的原始碼框架原始碼
- 集合框架-ArrayList集合的toString()方法原始碼解析框架原始碼
- Java集合框架原始碼剖析:TreeSet 和 TreeMapJava框架原始碼
- 集合框架-TreeSet集合框架
- 集合的toString()方法原始碼解析原始碼
- 死磕 java集合之TreeSet原始碼分析Java原始碼
- Java集合框架之 Java HashMap 原始碼解析Java框架HashMap原始碼
- 【JavaSE】Map集合,HashMap的常用方法put、get的原始碼解析JavaHashMap原始碼
- 集合-ArrayList 原始碼解析原始碼
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- 【java】【集合】TreeSetJava
- LinkedList原始碼(add方法)原始碼
- 使用TreeSet構造排序的集合排序
- Set集合的直接子類TreeSet
- JDK原始碼分析-TreeSetJDK原始碼
- Java 集合框架------ArrayList原始碼分析Java框架原始碼
- Java集合框架原始碼剖析:ArrayDequeJava框架原始碼
- Java 集合框架 ArrayList 原始碼剖析Java框架原始碼
- 集合-ConcurrentLinkedQueue 原始碼解析原始碼
- Java集合之Hashtable原始碼解析Java原始碼
- Java 集合Hashtable原始碼深入解析Java原始碼
- Java集合之ArrayList原始碼解析Java原始碼
- Java集合Stack原始碼深入解析Java原始碼
- JAVA集合:LinkedList原始碼解析Java原始碼
- Java集合之HashMap原始碼解析JavaHashMap原始碼
- Java集合類:AbstractCollection原始碼解析Java原始碼
- 集合框架原始碼學習之ArrayList框架原始碼
- Java集合(6)之 HashMap 原始碼解析JavaHashMap原始碼
- Java 集合系列:Vector原始碼深入解析Java原始碼
- Java集合之LinkedList原始碼解析Java原始碼
- ARouter路由框架原始碼解析路由框架原始碼
- weex eros框架原始碼解析ROS框架原始碼
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及區別Java
- android面試——開源框架的原始碼解析Android面試框架原始碼
- java原始碼研究--List中的set和add方法區別Java原始碼
- Treeset的兩種排序方法排序
- 集合框架原始碼學習之LinkedList框架原始碼
- Java集合框架原始碼剖析:HashSet 和 HashMapJava框架原始碼HashMap