HashMap底層實現原理

2022-08-13 03:54:07 字數 1075 閱讀 6538

hashmap map = new hashmap();

在例項化以後,底層建立了長度為16的一維陣列entry table

.....已經執行過put操作.....

map.put(key1 , value1);

呼叫key1所在類的hashcode(),計算key1雜湊值,此雜湊值經過某種演算法計算後,得到在entry陣列中的存放位置

大致過程與hashset類似

(具體的**可跳轉到如下**)

注意:雜湊值不同的新增成功情況和equals()返回false新增成功的兩種情況下:

此時key1-value1和原來的資料以鍊錶的方式儲存

在不斷的新增過程中,會涉及擴容問題,當超出臨界值且要存放的位置非空時,需要擴容

預設的擴容方式:擴容到原來容量的2倍,並將資料複製過來

相較於jdk7,在底層實現方面的不同如下

hashmap map = new hashmap();

底層沒有建立乙個長度為16的陣列

jdk8底層的陣列:node,而非entry陣列

map.put(key1 , value1);

首次呼叫put方法時,底層建立長度為16的陣列

jdk7底層結構:陣列 + 鍊錶

jdk8底層結構:陣列 + 鍊錶 + 紅黑樹

當陣列的某乙個索引位置上的元素以鍊錶形式存在的資料個數大於8且當前陣列的長度超過64,此時此索引位置上的所有資料改為使用紅黑樹儲存

default_initial_capacity:hashmap的預設容量16

default_load_factor:hashmap的預設載入因子:0.75

threshold:擴容臨界值,容量 * 填充因子——16 * 0.75 = 12

treeify_threshold:bucket中煉表長度大於該預設值,轉化為紅黑樹——8

min_treeify_capacity:桶中的node被樹化時最小的hash表容量——64

hashmap底層實現原理

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

HashMap底層實現原理

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

HashMap的底層實現原理

hashmap的底層是通過陣列 鍊錶 即雜湊表 的結構來實現的。hashmap的例項有兩個引數影響其效能 初始容量和載入因子。初始容量只是雜湊表在建立時的容量,載入因子是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。當雜湊表中的條目超出了載入因子與當前容量的乘積時,通過呼叫rehash方法將容量...