HashMap原始碼分析JDK8 putVal方法

2021-10-01 16:33:25 字數 1166 閱讀 2052

hashmap底層資料結構

插入的所有情況

原始碼分析

/**

* 實現map介面的put方法和相關功能

** 引數hash:新增鍵值對中key的雜湊值

* 引數key:新增鍵值對的鍵key

* 引數value:新增鍵值對的值value

* 引數onlyifabsent: 如果是true,不改變鍵值對中的舊值

* 引數evict:在hashmap中不用管,作用在linkedhashmap中

* * 返回之前的value或者null

*/final v putval

(int hash, k key, v value,

boolean onlyifabsent,

boolean evict)

//存在與新增鍵值對中key相同的

if(e.hash == hash &&

((k = e.key)

== key ||

(key != null && key.

equals

(k))))

break

; p = e;}}

//e不為空,說明存在與新增鍵值對中key相同的鍵值對

//下面的操作就是存入新值返回舊值

if(e != null)

}//修改計數器加1

++modcount;

//map中存入的鍵值對個數大於閥值,擴容if(

++size > threshold)

resize()

;//在hashmap中沒有具體實現,不用管

afternodeinsertion

(evict)

;return null;

}

這裡是將鍊錶轉換成紅黑樹的treeifybin方法:hashmap原始碼分析jdk1.8:treeifybin方

分析HashMap 的 JDK 原始碼

緣由 今天好友拿著下面的 問我為什麼 map.entry 這個介面沒有實現 getkey 和 getvalue 方法,卻可以使用,由此,開啟了一番查閱 jdk 原始碼的旅途 map map new hashmap map.put 1,張三 map.put 2,李四 map.put 3,王五 map....

hashmap原始碼分析jdk8

最近看了下jdk8的hashmap原始碼,相比於7,在儲存結構上有了些改變。1.在jdk8之前,hashmap的儲存結構是陣列 鍊錶的形式,那麼這種方式隨著鍊錶的長度增加,效率也凸顯出來。所以在jdk8中這塊做了優化,當鍊表超過一定長度時轉化為紅黑樹來解決這個問題,下面用流程圖畫出hashmap 的...

HashMap原始碼分析 JDK1 8

陣列 鍊錶 紅黑樹 陣列儲存元素,當有衝突時,就在該陣列位置形成乙個鍊錶,儲存衝突的元素,當鍊表元素個數大於閾值時,鍊錶就轉換為紅黑樹。transient node table transient int size int threshold final float loadfactor 預設初始容...