HashMap的底層實現

2021-10-05 17:59:44 字數 700 閱讀 4445

hashmap底層是使用陣列和鍊錶結合在一起使用,即鍊錶雜湊。hashmap通過key的hashcode經過擾動函式hash(int h)處理後得到hash值,然後通過((n-1)& hash)確定該元素存放的位置,if 當前位置已存在元素,就判斷當前位置的元素hash值以及key 是否相同,如果相同則直接覆蓋,不相同就通過拉鍊法解決衝突。

jdk1.8 擾動函式hash(object key)的原始碼:

static

final

inthash

(object key)

jdk1.7 擾動函式hash(int h)的原始碼:

static

inthash

(int h)

1.7擾動函式經過了4次處理,效能會略差於1.8

資料結構簡圖1.8之前:

解決hash衝突時有了較大變化,當鍊表長度大於閾值(預設為8),並且陣列長度大於64時會將鍊錶轉換為紅黑樹,以減少搜尋時間,如果陣列長度小於64時會先進行陣列擴容(resize())

HashMap底層實現

hashmap中定義了乙個node結構,很明顯可以看出這是乙個鍊錶的節點定義。鍵值對key和value以及key的hash值都儲存在這個節點中 static class node implements map.entry hashmap的插入方法在key值已存在的時候是直接替換掉value值,若ke...

hashMap的底層實現

陣列 儲存區間連續,占用記憶體嚴重,定址容易,插入刪除困難 鍊錶 儲存區間離散,占用記憶體比較寬鬆,定址困難,插入刪除容易 hashmap綜合應用了這兩種資料結構,實現了定址容易,插入刪除也容易 hashmap結構示意圖 實現原理 用乙個陣列來儲存元素,但是這個陣列儲存的不是基本資料型別。hashm...

hashmap底層實現原理

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