原始碼解析 HashMap put方法解析

2021-10-25 15:30:46 字數 582 閱讀 1963

1.算出key的hash值,key的hashcode的高低位異或算出來。

2.若果雜湊表為空,則初始化雜湊表。

3.算出雜湊表下標位置,(n - 1) & hash。

4.雜湊表下標位置值為空,則把傳入的引數封裝成node節點設定到雜湊表下標位置。

5.如果該雜湊表下標的值不為空,如果key和hash值與傳入的值相等,則直接覆蓋,如果雜湊表下標的節點是紅黑樹,則走紅黑樹的邏輯,相等則覆蓋,不相等,則插入,具體紅黑樹邏輯後面會講解。

6.如果當前雜湊表下標的值與傳入的值不相等,又不是紅黑樹,則判斷該下標的節點next是否為空,如果為空直接把傳入的引數封裝成node節點插入到該雜湊表下標值後面,然後判斷鍊錶元素個數是否超過8,超過則走樹化的邏輯,沒超過則break,修改次數modcount加1,元素個數加1,然後判斷雜湊表元素個數是否超過擴容閾值,超過則擴容。

7.如果是鍊錶,已經發生過hash衝突了,則迴圈這個鍊錶,key,hash值相等則覆蓋,不相等則插入,插入完以後再次判斷是否達到樹化條件,沒有達到樹化條件,break,修改次數modcount加1,元素個數加1,然後判斷雜湊表元素個數是否超過擴容閾值,超過則擴容.

HashMap put方法原始碼解析

先上原始碼 public v put k key,v value 這裡先呼叫了hash方法得到key的hash值 並不是直接得到key的hash,具體可以看hash方法 然後呼叫了內部putval方法,hash,key,value引數不需要多說,onlyifabsent 引數 if true,don...

hashmap put 方法 原始碼分析

public v put k key,v value 如果key null 執行nullkey 操作 if key null return putfornullkey value 通過key 計算 hash值 int hash sun.misc.hashing.singlewordwangjenki...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...