1. 程式人生 > >Java容器來一發(四)HashMap

Java容器來一發(四)HashMap

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效能會高一些。