TreeMap原始碼分析

2021-09-26 02:17:11 字數 1061 閱讀 6239

public v put(k key, v value) 

int cmp;

entryparent;

// split comparator and comparable paths

comparator<? super k> cpr = comparator;

if (cpr != null) while (t != null);

}else while (t != null);

}entrye = new entry<>(key, value, parent);

//注意:這裡只判斷大於和小於0兩種情況。等於0的情況早已經覆蓋新值並返回了。

if (cmp < 0)

parent.left = e;

else

parent.right = e;

fixafterinsertion(e); //紅黑樹的調整,旋轉、變色等

size++;

modcount++;

return null;

}

public v get(object key)
final entrygetentry(object key) 

return null;

}

注意:

treemap在get乙個值得時候,也是如果大於當前節點,則往右邊走;反之則往左邊走。

1、linkedhashmap和treemap都有順序。區別是linkedhashmap是按插入順序,treemap可以自行指定順序。linkedhashmap是通過鍊錶儲存插入節點。

2、treemap可以自行指定順序,不指定時預設按key的大小進行排序。

3、treemap底層就完全是個紅黑樹了,不再有陣列存在了。treemap也不是繼承於hashmap。

4、linkedhashmap繼承於hashmap,底層還是陣列+鍊錶+紅黑樹結構,只是在put時重寫了newnode方法,底層再建立乙個雙向鍊錶,按順序接入每乙個節點。

5、

TreeMap 原始碼分析

treemap底層是使用紅黑樹實現的儲存鍵值對的map容器,可以通過比較器進行排序。紅黑樹本質上是一棵弱平衡二叉樹,它的節點有紅色和黑色兩種顏色。主要特性有五點。1 每個節點或者是黑色,或者是紅色。2 根節點是黑色。3 每個葉子節點 nil 是黑色。注意 這裡葉子節點,是指為空 nil或null 的...

TreeMap原始碼分析

基於紅黑樹的實現,根據key的自然順序排序,或者根據構造方法傳入的排序方式。構造方法傳入的比較器 藉此維護鍵的順序 private final comparator super k comparator private transient entry root 根節點 private transie...

TreeMap原始碼分析

treemap是基於紅黑樹結構實現的一種map。紅黑樹是一種自平衡二叉查詢樹。二叉查詢樹 若左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值 若右子樹不為空,則右子樹上所有節點的值均大於它的根節點的值 左 右子樹也分別為二叉查詢樹 沒有鍵值相等的節點。treemap 利用了紅黑樹左節點小,右...