HashMap 的 get 方法的流程分析(原始碼)

2021-10-25 20:09:14 字數 712 閱讀 8558

流程首先根據 hash 方法獲取到 key 的 hash 值

然後通過 hash & (length - 1) 的方式獲取到 key 所對應的node陣列下標 ( length對應陣列長度 )

首先判斷此結點是否為空,是否就是要找的值,是則返回空,否則進入第二個結點。

接著判斷第二個結點是否為空,是則返回空,不是則判斷此時資料結構是鍊錶還是紅黑樹

鍊錶結構進行順序遍歷查詢操作,每次用 == 符號 和 equals( ) 方法來判斷 key 是否相同,滿足條件則直接返回該結點。鍊錶遍歷完都沒有找到則返回空。

紅黑樹結構執行相應的 gettreenode( ) 查詢操作。

原始碼分析

public v get

(object key)

final node

getnode

(int hash, object key)

while

((e = e.next)

!= null);}

}return null;

}

remove,put,containskey 都可以參照 get 的流程,面試的話是沒有問題的。put 的話涉及到 - 擴容 和- 紅黑樹的公升級,remove 會涉及到- 紅黑樹的退化,其他流程大體上是一樣的。都是獲取到 hash 值,根據 hash 值得到陣列下標,進行遍歷操作。

hashmap知識點總結(附原始碼分析鏈結)

HashMap原始碼 get方法

環境 jdk1.8 get方法原始碼如下 public v get object key hash方法原始碼如下 static final int hash object key getnode方法原始碼如下 傳入引數 1.根據key雜湊計算得到的雜湊值 2.key值 final nodegetno...

hashmap 的put與get 筆記

put操作 成員變數 transient entry table entry empty table 陣列 1 資料介面就是陣列 加鍊表 hashmap有 table陣列專門記錄 的就是,正常的put值就是計算出key的hashcode然後找出索引 i 去table陣列中找,如果存在就用單鏈表儲存,...

HashMap原始碼之get與put方法

hashmap是基於陣列和鍊錶來儲存鍵值對物件的,我們簡單看下get和put方法的原始碼。1 我們呼叫put方法來儲存鍵值對時,它先呼叫hash方法來計算hashcode,然後用hashcode和entry陣列的大小來做按位與操作,求出所在的entry陣列的下標位置。通過key與下標所在的entry...