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概念和...