HashMap底層原理

2022-10-10 10:30:14 字數 793 閱讀 8775

jdk1.8之前,hashmap底層基於陣列和鍊錶。

jdk1.8,hashmap底層基於陣列+鍊錶+二叉樹(紅黑樹)。

先建立陣列

node[ ]  table = new node[16] (雜湊桶初始haul)

再建立鍊錶物件

tableclass node{

hash;    //hash值

key;      //鍵

value;         //值

node next;     //用於指向鍊錶的下一層(產生衝突,用拉鍊法)

以下是具體的put過程(jdk1.8版)

1、對key求hash值,然後再計算下標

2、如果沒有碰撞,直接放入桶中(碰撞的意思是計算得到的hash值相同,需要放到同乙個bucket中)

3、如果碰撞了,以鍊錶的方式鏈結到後面(此處碰撞個人理解為hash值相同,key值不同)

4、如果鍊錶長度超過閥值( treeify threshold==8),就把鍊錶轉成紅黑樹,鍊錶長度低於6,就把紅黑樹轉回鍊錶

5、如果節點已經存在就替換舊值

6、如果桶滿了(容量16*載入因子0.75),就需要 resize(擴容2倍後重排)

下圖為取值過程:

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

HashMap底層原理

hashmap實現map介面,非執行緒安全的,區別於concurrenthashmap。允許使用null值和null鍵,不保證對映的順序.底層資料結構是乙個 陣列 鍊錶 紅黑樹 put 根據key計算得到key.hash h k.hashcode h 16 根據key.hash計算得到桶陣列的索引i...

HashMap底層原理

預設負載因子 static final float default load factor 0.75f 無參構造 public hashmap 有參構造 public hashmap int initialcapacity public hashmap int initialcapacity,flo...