深入理解HashMap之putVal方法

2021-10-02 16:40:27 字數 1343 閱讀 3719

putval的整個流程

如果表為空 則呼叫resize方法 初始化化tab

如果鍵對應的桶為null 則直接存入

否則 判斷待加入的鍵是否和桶的頭節點相等 相等的話則 更新值

不然的話就發生了hash衝突

發生hash衝突的話

1.將遍歷鍊錶 乙個乙個的往下找 知道找到null的位置

hashmap採用拉鍊法 解決hash衝突 當桶中的存入第九個節點並且表中的容量小於64時將鍊錶先轉換為雙向鍊錶再轉換為紅黑樹

//putval的整個流程 

//1. 如果tab為null 則分配初始容量 呼叫resize方法

//2. 如果桶中沒有任何元素則直接建立節點

//3. 否則桶中發生hash衝突 或者說要更新新的值

//4. 怎麼判斷要更新值呢

// hash值相等 並且 鍵和待查入的鍵相等 或者說equals方法的返回值為true

// 則 更新值

//5. 發生hash衝突 1.使用拉鍊法 2.使用紅黑樹儲存

拉鍊法

//迴圈遍歷鍊錶 直至找到那個鍵對應的位置 如果

//hash值要相等 並且 鍵和待查入的鍵相等 或者說equals方法的返回值為true

//更新值

//建立新的節點時 當大於等於第7個next(鍊錶的長度已為8) 也就是說put第9個元素時

//注意在put第八個元素時 此時鍊錶長度為7

//也就是第6個next 將不會進行tree化

呼叫split方法

//更新值

// 如果加入元素後的長度 大於臨界值 則呼叫resize方法

final v putval

(int hash, k key, v value,

boolean onlyifabsent,

boolean evict)

//命中則退出

if(e.hash == hash &&

((k = e.key)

== key ||

(key != null && key.

equals

(k))))

break

;//更新p方便向下乙個查詢

p = e;}}

//跟新value

if(e != null)

}++modcount;

//更新size 這裡的size表示表中存在的資料數量if(

++size > threshold)

resize()

;afternodeinsertion

(evict)

;return null;

}

HashMap深入理解

hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。hashmap儲存的是鍵值對,hashmap很快。此類不保證對映的順序,特別是它不保證該順序恆久不變。此實現假定雜湊函式將元素適當地分布在各桶之間,可以為基本操作 get和put 提供...

深入理解hashmap的原理

一 什麼是雜湊?雜湊也叫雜湊,是將不同長度的輸入通過乙個函式轉換成同乙個長度輸出的過程,這個輸出的值叫雜湊值,這個轉換函式叫雜湊函式,雜湊函式所採用的演算法加雜湊演算法。實際上是乙個通過訊息得到訊息摘要的方法 二 什麼是雜湊表?雜湊表是乙個通過key訪問value的資料結構,它是基於乙個陣列,存資料...

HashMap內部原理深入理解

hashing 雜湊法 的概念 雜湊法 hashing 是一種將字元組成的字串轉換為固定長度 一般是更短長度 的數值或索引值的方法,稱為雜湊法,也叫雜湊法。由於通過更短的雜湊值比用原始值進行資料庫搜尋更快,這種方法一般用來在資料庫中建立索引並進行搜尋,同時還用在各種解密演算法中。hashmap概念和...