基於紅黑樹的實現,根據key的自然順序排序,或者根據構造方法傳入的排序方式。
//構造方法傳入的比較器 藉此維護鍵的順序
private
final comparator<
?super k> comparator;
private
transient entry
root;
//根節點
private
transient
int size =0;
//長度
private
transient
int modcount =0;
//修改次數
//構造乙個空的map,使用鍵的自然排序
public
treemap()
public
treemap
(comparator<
?super k> comparator)
public
treemap
(map<
?extendsk,
?extends
v> m)
public
treemap
(sortedmap
?extends
v> m)
catch
(catch
(}
//紅黑樹
static
final
class
entry
implements
map.entry
}
public v put
(k key, v value)
int cmp;
entry
parent;
// 根據比較器獲得父節點和比較路徑
comparator<
?super k> cpr = comparator;
//如果為空 使用key自然排序
if(cpr != null)
while
(t != null);}
//使用比較器 找到父節點
else
while
(t != null);}
//構造新節點 根據比較器結果判斷 左右節點
entry
e =newentry
<
>
(key, value, parent);if
(cmp <0)
parent.left = e;
else
parent.right = e;
fixafterinsertion
(e);
//插入後修正紅黑樹
size++
; modcount++
;return null;
}
public v get
(object key)
//使用比較器找到可以所在節點
final entry
getentry
(object key)
return null;
}final entry
getentryusingcomparator
(object key)
}return null;
}
public v remove
(object key)
private
void
deleteentry
(entry
p)// p has 2 children
// 修復節點
entry
replacement =
(p.left != null ? p.left : p.right);if
(replacement != null)
else
if(p.parent == null)
else
}}
treemap內部是紅黑樹
如果不自定義排序,那麼就使用key的自然排序
可以儲存null鍵和值
TreeMap 原始碼分析
treemap底層是使用紅黑樹實現的儲存鍵值對的map容器,可以通過比較器進行排序。紅黑樹本質上是一棵弱平衡二叉樹,它的節點有紅色和黑色兩種顏色。主要特性有五點。1 每個節點或者是黑色,或者是紅色。2 根節點是黑色。3 每個葉子節點 nil 是黑色。注意 這裡葉子節點,是指為空 nil或null 的...
TreeMap原始碼分析
public v put k key,v value int cmp entryparent split comparator and comparable paths comparator cpr comparator if cpr null while t null else while t n...
TreeMap原始碼分析
treemap是基於紅黑樹結構實現的一種map。紅黑樹是一種自平衡二叉查詢樹。二叉查詢樹 若左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值 若右子樹不為空,則右子樹上所有節點的值均大於它的根節點的值 左 右子樹也分別為二叉查詢樹 沒有鍵值相等的節點。treemap 利用了紅黑樹左節點小,右...