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 利用了紅黑樹左節點小,右...