1. 程式人生 > >HashMap 學習心得

HashMap 學習心得

常見 常常 .cn 寫代碼 出現 等於 心得 cnblogs png

1.構造

HashMap 底層數據結構線性數組,HashMap有一個靜態內部類Entry,Entry有四個屬性,key,value,next,hash

技術分享

Entry就是HashMap鍵值對實現的一個基礎bean,HashMap的數據全都存在了Entry[]裏面,技術分享

所以說HashMap是一個線性數組

2.hash碰撞

hash值不會碰撞,因為Entry的next屬性,作用是指向下一個Entry。打個比方,第一個鍵值對A進來,通過計算其key的hash得到的index=0,記做:Entry[0] = A。一會後又進來一個鍵值對B,通過計算其index也等於0,現在怎麽辦?HashMap會這樣做:B.next = A

,Entry[0] = B,如果又進來C,index也等於0,那麽C.next = B,Entry[0] = C;這樣我們發現index=0的地方其實存取了A,B,C三個鍵值對,他們通過next這個屬性鏈接在一起

3.get方法

首先看具體實現,首先做了下校驗,然後用了個getEntry方法

技術分享

getEntry方法具體實現

技術分享

首先做一個校驗,然後算出key的hash值,遍歷Entry,定位找到該雲素。主要是根據hash值和Entry.key取的交集。

看到jdk中這麽多校驗,所以以後自己寫代碼的時候,要三思,接受的數據出現意外情況怎麽辦,多做一些校驗總是沒錯的。

4.put方法

什麽都不說,先來看代碼

技術分享

技術分享

這裏,HashMap在添加元素時,會判斷不停的判斷添加元素後大小是否大於閾值,如果大於的話則兩倍擴充。

(這裏也是很值得大家學習的,不要將數組寫死哦,要支持動態擴展哦)

技術分享

總結:HashMap在java編程中時是非常常見的,所以熟悉hashMap的具體實現是很有幫助的。

HashMap 學習心得