HashMap底層實現及原始碼解讀(jdk8)

2021-10-06 23:53:10 字數 940 閱讀 4557

先看一下基本的繼承實現關係

基本屬性

先從幾個常用的方法看下

hashmap空構造為loadfactor變數賦值為0.75,而hashmap的構造方法包含空構造有如下幾種:

詳細看下前兩個傳參構造:

乙個傳參的構造,給了0.75的預設引數,內部呼叫的雙引數構造方法;

而在hashmap(int initialcapacity, float loadfactor)方法內,第一步校驗initialcapacity的下限,如果小於0拋異常;

第二步校驗initialcapacity的上限,《左移位運算,1 << 30=1073741824,如果傳入值大於這個上限,則賦該值;

第三步校驗loadfactor,小於等於0或者值為nan的情況,拋異常;

第四步loadfactor和threshold賦值。

|=運算加》邏輯右移,從結果來看,返回的值是接近傳參2倍大小最近的2的整次冪,官方解釋為:返回給定目標容量的兩倍大小的冪。

先捋到這,持續更新。

HashMap底層原始碼實現

首先需要明確的是 hashmap 內部結構 可以看作是陣列和鍊錶結合組成的復合結構,陣列被分為乙個個桶 bucket 每個桶儲存有乙個或多個entry物件,每個entry物件包含三部分 key 鍵 value 值 next 指向下乙個entry 通過雜湊值決定了entry物件在這個陣列的定址 雜湊值...

HashMap底層實現原理 原始碼

基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用null值 和 null鍵 檢視構造方法 預設初始的容量為16 arraylist預設初始值是 10 預設載入因子為0.75,什麼意思呢?就是說當資料元素達到容量的75 時,就會進行擴容 方法和map中的方法是一樣的 預設初始...

HashMap原始碼分析及底層原理

原始碼分析 總結 hashmap map new hashmap i預設情況下,先不建立長度為16的陣列 當首次呼叫map.put 時,再建立長度為16的陣列 陣列為node型別,在jdk7中稱為entry型別 形成鍊錶結構時,新新增的key value對在鍊錶的尾部 七上八下 當陣列指定索引位置的...