HashMap底層實現原理 原始碼

2021-10-10 04:16:47 字數 1217 閱讀 7034

基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用null值 和 null鍵

檢視構造方法:預設初始的容量為16 ,arraylist預設初始值是 10 。 預設載入因子為0.75,什麼意思呢?就是說當資料元素達到容量的75%時,就會進行擴容

方法和map中的方法是一樣的

預設初始容量大小 : 1 << 4    (16)

最大容量大小 : 1  << 30 : 2的30次方

預設的載入因子: 0.75

由於1.8之後增加了紅黑樹,所以hashmap也發生了一點變化增加了:

hashmap的鍊錶變成紅黑樹的兩個條件: 陣列的長度大於64,鍊錶的長度大於 8 

當鍊表的長度變成6了,紅黑樹就會變成鍊錶了

剛建立好hashmap之後,沒有新增元素的時候     table(陣列)為  null , size = 0 ,陣列長度不是16,因為還沒賦值,這麼做的目的是節省空間

在新增第乙個資料的時候,陣列大小就變成了16。

當資料新增到容量的0.75時,16*0.75 = 12,資料量達到12時,就會resize,變成原來的2倍,16*2 = 32

1、hashmap剛建立的時候,table 為 null。為了節省空間,當新增第乙個元素時,table的容量就會調整為16

2、當元素個數大於閾值(16*0.75 = 12)時,會進行擴容,擴容後的大小為原來的 2 倍。目的是減少調整元素的個數

3、jdk 1.8 當每個鍊錶的長度大於 8,並且陣列元素個數大於64 時,會調整為紅黑樹,目的是提高執行效率

4、jdk1.8 當鍊表長度小於 6時,調整為鍊錶

5、jdk1.8 以前,鍊錶是從頭插入的,jdk 1.8之後變成了從尾插入

hashset 的原始碼其實就是用的 hashmap, 其實都是差不多的儲存結構,儲存資料的原理都差不多

hashmap底層實現原理

每次初始化hashmap都會構造乙個table陣列,而table陣列的元素為entry節點。static class entryimplements map.entryhashmap也可以說是乙個陣列鍊錶,hashmap裡面有乙個非常重要的內部靜態類 entry,這個entry非常重要,它裡面包含了...

HashMap底層實現原理

hashmap map new hashmap 在例項化以後,底層建立了長度為16的一維陣列entry table 已經執行過put操作.map.put key1 value1 呼叫key1所在類的hashcode 計算key1雜湊值,此雜湊值經過某種演算法計算後,得到在entry陣列中的存放位置 ...

HashMap底層實現原理

一 jdk1.7中hashmap的底層實現原理 首先,當我們通過hashmap的構造方法建立乙個hashmap物件時,底層就會建立乙個entry型別的一維陣列 預設初始化長度為16 當我們執行put操作的時候,會呼叫key所屬類的hashcode方法計算出key的hash值,然後將hash值通過雜湊...