基於雜湊表的 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值通過雜湊...