流程首先根據 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...