TreeMap的原始碼

2021-09-26 08:23:09 字數 920 閱讀 3096

目錄

元素結構treemapentry

存放元素的邏輯

獲取元素

static final class treemapentryimplements map.entry
public v put(k key, v value) 

int cmp;

treemapentryparent;

comparator<? super k> cpr = comparator;

//更父節點比較,小於放左邊,大於放右邊。直到父節點為空的時候

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

}// 如果比較器物件為空,使用預設的比較機制

else while (t != null);

}treemapentrye = new treemapentry<>(key, value, parent); // 根據key找到父節點後新建乙個節點

// 根據比較的結果來確定放在左子樹還是右子樹

if (cmp < 0)

parent.left = e;

else

parent.right = e;

fixafterinsertion(e);

size++; // 集合大小+1

modcount++;

return null;

}

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

return null;

}

還是從頭節點,乙個個做比較,最後找到key的位置,然後獲取其值

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原始碼分析

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