Java容器來一發(四)HashMap
阿新 • • 發佈:2019-01-03
1、HashMap基本實現
HashMap 的基本資料結構是Entry<K,V>[] table。
HashMap在JDK1.8後把基於陣列+紅黑樹,提高查詢效率。
2、HashMap原理
利用key的hashCode重新hash計算出當前物件的元素在陣列中的下標。
儲存時,如果出現hash值相同的key,此時有兩種情況。(1)如果key相同,則覆蓋原始值;(2)如果key不同(出現衝突),則將當前的key-value放入連結串列中。
獲取時,直接找到hash值對應的下標,在進一步判斷key是否相同,從而找到對應值。
HashMap是如何解決hash衝突的問題,核心就是使用了陣列的儲存方式,然後將衝突的key的物件放入連結串列中,一旦發現衝突就在連結串列中做進一步的對比。
3、HashMap效能
HashMap有兩個引數影響其效能:容量和載入因子。
當雜湊表中的條目超過二者乘積時,雜湊表進行rehash操作,雜湊表桶數加倍。載入因子衡量散列表的空間使用程度,越大表示散列表的裝填程度越高。載入因子越大,對空間利用越充分,但查詢效率越低;載入因子越小,則散列表資料過於稀疏,空間浪費。
4、與HashTable的區別
兩者最主要的區別在於Hashtable是執行緒安全,而HashMap則非執行緒安全。Hashtable的實現方法裡面都添加了synchronized關鍵字來確保執行緒同步,因此相對而言HashMap效能會高一些。