原始碼分析之HashMap

2021-10-24 14:05:08 字數 641 閱讀 2213

首先hashmap繼承了abstractmap,並且實現了map、cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。

其中abstractmap是乙個抽象類,提供了map介面的基本實現,減輕實現介面的工作,最後還是回到了map介面上。map介面規範代表著,將鍵對映到值的物件,對映不能包含重複的鍵,每個鍵最多可以對映到乙個值。map提供了三個集合檢視(鍵的set、值的collection,鍵值對映的set)。

所以hashmap本質上就是map結構的底層實現。

hashmap的函式可以分為核心與非核心,如暴露給使用者的增刪查改操作都是基於核心進行包裝的非核心函式。

int h;

return

(key == null)?0

:(h = key.

hashcode()

)^ h >>>

16;

hashmap的雜湊演算法,對於給定的物件返回它對應的hash值。

為了保證在陣列長度較小時hash也能有較好的分布,需要將高16位的打亂到低16位,所以使用了hash ^ hash >>> 16這個操作,將高位的影響向下傳播。

Java原始碼分析之HashMap

預設的初始容量,空間必須為2的冪 static final int default initial capacity 1 4 aka 16 最大容量 static final int maximum capacity 1 30 預設的載入因子,這裡解釋一下載入因子,在map被建立後,就有了乙個容量,...

HashMap原始碼分析

public hashmap int initialcapacity,float loadfactor 2 接下來是重要的put方法,put方法用於將鍵值對儲存到map中,讓我們來具體分析一下。public v put k key,v value if key null 若key為null,則將va...

HashMap 原始碼分析

1 getentry object key 方法 final entrygetentry object key return null 根據key的hash值計算出索引,得到table中的位置,然後遍歷table處的鍊錶 for entrye table indexfor hash,table.le...