TreeMap原始碼分析

2021-09-29 10:16:59 字數 2219 閱讀 8799

基於紅黑樹的實現,根據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 利用了紅黑樹左節點小,右...