HashMap 學習心得
阿新 • • 發佈:2017-05-17
常見 常常 .cn 寫代碼 出現 等於 心得 cnblogs png ,Entry[0] = B,如果又進來C,index也等於0,那麽C.next = B,Entry[0] = C;這樣我們發現index=0的地方其實存取了A,B,C三個鍵值對,他們通過next這個屬性鏈接在一起
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
3.get方法
首先看具體實現,首先做了下校驗,然後用了個getEntry方法
getEntry方法具體實現
首先做一個校驗,然後算出key的hash值,遍歷Entry,定位找到該雲素。主要是根據hash值和Entry.key取的交集。
看到jdk中這麽多校驗,所以以後自己寫代碼的時候,要三思,接受的數據出現意外情況怎麽辦,多做一些校驗總是沒錯的。
4.put方法
什麽都不說,先來看代碼
這裏,HashMap在添加元素時,會判斷不停的判斷添加元素後大小是否大於閾值,如果大於的話則兩倍擴充。
(這裏也是很值得大家學習的,不要將數組寫死哦,要支持動態擴展哦)
總結:HashMap在java編程中時是非常常見的,所以熟悉hashMap的具體實現是很有幫助的。
HashMap 學習心得