一、 構造器:算法
a)得到默認數組大小:1>>4 :16數組
b) 得到負載因子:0.75:衡量hashmap的空間使用程度安全
i.過大:使用空間更加充分,可是查找效率變低,即時間複雜度變大 ii.太小:hashmap數據過於稀疏,形成空間浪費,即空間複雜度變大
c)建立數組併發
二、 Put()方法:使用key的hash算法,計算出可key的存儲的數組位置,肯定key的位置後相應的value也會肯定,若是數組位置已經有數值存在,則以第一個值爲鏈頭以鏈表形式存儲。jvm
三、 Get()方法:計算出key的hashcode值,而後去尋找高併發
四、 Resize()方法:若是須要的存放的存儲空間大於默認數組大小*負載因子的乘積,那麼就發生擴容,擴大爲原來的兩倍線程
五、 問題:指針
a)爲何hashmap的容量老是2的次方code
i.由於hashmap中有一個方法是h&table.length-1,這樣能夠減小碰撞機率。 ii.例子: 8&14 9&14 與 8&15 9&15 15不會發生碰撞 14會發生碰撞,這是一會我數學機率問題。
b) 能夠的話建議使用hashmap的clear方法循環使用hashmap內存
i.應爲hashmap是強引用類型,原有不適使用的hashmap不會被jvm回收,可能形成內存泄露
一、 狀況(1.7):內部鏈表遭到破壞,發生鏈表成環,形成死循環,cpu飆升
二、 解決:1.8 引入兩個指針聲明 確保順序
一、 方法
a)使用collections.synchronizedmap方法
b) 使用concurrenthashmap併發集合類代替