HashMap底層及使用個人理解
阿新 • • 發佈:2017-10-04
strong next ted edm 性能 沖突 好的 鏈表 保存
HashMap原理
HashMap底層采用數組結合鏈表形式保存,數組中保存的數據Entry,它有四個屬性(key,value,next,hashcode)。我們都知道HashMap采用鍵值對保存數據。
實現流程如下,先用本地方法獲取key的hashcode,再用該數據的hash值與數組長度-1,采用按位與獲得數組的下標,便可以獲取該鍵key所對應的值。
HashMap沖突(jdk中的實現):
HashMap雖然可以很好的保存,查詢數據,但是可能會發生多個key對應一個hashcode,其采用鏈表的形式保存這樣的數據。
實現如下:當發生HashMap沖突時,先將新值替換原有的值value。然後將新值Entry中的next指向舊值對應的地址。
HashMap優化使用:
HashMap子類LinkedHashMap,繼承了HashMap性能優點,在其基礎上進行了改進,增加了排序功能,排序功能有插入時排序和最近訪問排序。
HashMap兄弟類TreeMap,TreeMap額外實現了SortedMap 接口,不僅可以對鍵進行排序,還可以對其元素便可以進行排序。就其性能來說,采用紅黑樹排序算法,性能很好。
個人推薦:如果要對Map進行排序,可以直接使用該TreeMap 而不是在程序中使用排序算法。重復造輪子,增加開發成本,也可能會成為以後開發的瓶頸。
HashMap底層及使用個人理解