HashMap底層原始碼分析

2022-07-10 06:06:09 字數 1479 閱讀 3013

*static final int**default_initial_capacity*** = 1 << 4;// aka 16表示1向左移4位,2的4次方**

**static final int**maximum_capacity**

= 1 << 30;//hashmap陣列的最大容量

*static final float**default_load_factor*** = 0.75f;//預設載入因子,當集合的容量大於75%的時候,就進行擴容

*static final int**treeify_threshold*** = 8;當鍊表長度大於8的時候,就調整成紅黑樹

*static final int**untreeify_threshold*** = 6; 當鍊表長度小於6時,調整成煉表

*static final int**min_treeify_capacity*** = 64; 當鍊表長度大於8時,並且集合元素個數大於等於64

*transient*node*table*;//hash表中的陣列

*transient int**size*;//元素個數

(1)hashmap剛剛建立時候,table是null,為了節省空間,當新增第乙個元素的時候,table容量調整為16.

(2)當元素個數大於閾值(16*0.75=12)時,會進行擴容,擴容後大小為原來的2倍,目的是減少調整元素的個數。

(3)jdk1.8 當每個鍊錶長度大於8,並且陣列元素個數大於等於64的時候,會調整為紅黑樹,目的是提高執行效率

(4)jdk1.8 當鍊表長度小於6時,會調整成煉表

(5)jdk1.8以前,鍊錶時頭插法,jdk1.8以後時是尾插入。

hashset的底層是hashmap

hashmap[重點]:

jdk1.2版本,執行緒不安全,執行效率快;允許用null,作為key或是value。

hashtable:

jdk1.0版本,執行緒安全,執行效率慢;不允許null作為key或是value。基本上在實際專案開發過程中這個類是不用的。

propertise:繼承自hashtable

hashtable的子類,要求key和value都是string。通常用於配置檔案的讀取。

treemap:

實現了sortedmap介面(是map的子介面),可以對key自動排序。

treeset底層的實現原理使用的就是treemap

HashMap原始碼分析及底層原理

原始碼分析 總結 hashmap map new hashmap i預設情況下,先不建立長度為16的陣列 當首次呼叫map.put 時,再建立長度為16的陣列 陣列為node型別,在jdk7中稱為entry型別 形成鍊錶結構時,新新增的key value對在鍊錶的尾部 七上八下 當陣列指定索引位置的...

HashMap底層原始碼解析

目錄 一 分析hashmap的資料結構 1.使用陣列儲存,加快訪問速度 2.陣列中的鍊錶,解決hash衝突 3.使用紅黑樹優化鍊錶,防止大量hash衝突 二 hashmap主要原始碼解讀 三 總結 在看原始碼之前,了解一下它的資料結構和執行過程,才能更快更加有效率的讀懂原始碼。hashmap實際儲存...

HashMap底層原始碼剖析

陣列 單向鍊錶 紅黑樹 陣列 陣列每一項都是乙個鍊錶,其實就是陣列和鍊錶的結合體 單向鍊錶 當法神hash碰撞時,首先會找到陣列對應位置,然後1.8採用尾插入法 1.7採用頭插入法 形成乙個單項鍊表結構 紅黑樹 當陣列中每項的鍊錶長度大於8時,會轉換為紅黑樹 hash碰撞 不同的key可能會產生相同...