HashMap類的理解

2021-07-03 14:11:57 字數 2404 閱讀 4413

hashmap是乙個雜湊表,它的儲存內容是鍵值對。

紫色部分代表雜湊表,每個元素後面都是乙個單鏈表的頭結點。

原始碼分析:

上面原始碼,

hashmap初始容量為

4個,最大容量為2的

30次冪,增長因子為

0.75

,在進行擴容時,擴容數量

=增長因子

*當前容量。第

90行,為對應的

hash

hashmapentry對已的結構:

1.當key

為null

時,在414

行先檢測

entryfornullkey

是否為空

1.1 如果不為空,在

422行直接更新

entryfornullkey

的value

,並返回對應的

hashmapentry

。 1.2 如果為空,在

415行和

485行出,

new 

乙個hashmapentry

,然後賦給

entryfornullkey

。備註:key

為null

的時候,

entryfornullkey

是作為hashmap

的乙個變數,儲存

key為

null

的hashentry

的,並沒有將

key為

null

併入雜湊表中

2.當key

不為null

時,通過

key的

hashcode

找到雜湊表中的

index

,然後遍歷

index

位置下的鍊錶,通過

394行的比較(通過

hashcode

和key

的equals

共同確認是否是需要找的

entry

)2.1 如果找到,直接替換

value

2.2 如果未找到

2.2.1 在

404行,比較是否需要擴容,下面是擴容的方法:在

574行,擴容時以當前容量的

2倍進行擴容的。

2.2.2 然後通過

addnewentry

方法,將新的

entry

加入到裡面去。

2.2.3 在

addnewentry

中,即476

行,直接是

table[index]=new hashmapentry

,由此可見,每次

put的

entry

都在鏈頭。

1.當key==null

時,若entryfornullkey

!=null

,則直接將

entryfornullkey=null

。2.當key

!=null

時,尋找

entry

的方式和

put一樣,最終通過比對

hashcode

以及equals

比較,確認需要

remove

的entry

Hashmap的學習理解

一 hashmap的簡介概況 1.hash簡介 hashmap 是乙個雜湊表,它儲存的內容是鍵值對 key value 對映。hashmap 的實現不是同步的,這意味著它不是執行緒安全的。它的key value都可以為null。此外,hashmap中的對映不是有序的。hashmap 的例項有兩個引數...

對於hashmap的理解

對key求hashcode得到的值來選桶 對key求equals,如果相同則覆蓋,不相同則尾插成鍊錶 太長變成紅黑樹 取值的時候是插入的逆過程,通過求傳入的key的hashcode來選桶,桶裡的鍊錶挨個和傳入的key求equals,true則取value,false則繼續找下乙個。之前一直都是這麼理...

HashMap原理的理解

hashmap 首先根據key計算hash值,hashcode右移16位與hashcode異或計算 用hash值不用hashcode值是因為hashcode 32位 太大不方便計算,並且得到答案的概率不均衡。第二步 是根據hash值去計算陣列下標 n 1 hash 用這個不用hash值取餘計算因為二...