總結(jié)
上一篇文章講了一些我理解的HashMap蒲赂,這里我們總結(jié)概括一下亚兄,包括和其他集合的比較
1.HashMap特點(diǎn)
- 底層是散列表+紅黑樹(shù)顽冶。初始容量為16,裝載因子為0.75岩喷,每次擴(kuò)容2倍
- 允許為null恕沫,存儲(chǔ)無(wú)序
- 非同步,也就是說(shuō)是線(xiàn)程不安全的
- 散列表容量大于64且鏈表大于8時(shí)纱意,轉(zhuǎn)成紅黑樹(shù)
- Key的哈希值會(huì)與該值的高16位做異或操作婶溯,進(jìn)一步增加隨機(jī)性
- 當(dāng)散列表的元素大于容量*裝載因子時(shí),會(huì)再散列,每次擴(kuò)容2倍
- 如果hashCode相同迄委,key不同則替換元素褐筛,否則就是散列沖突
2.與ConcurrentHashMap比較
- 底層是散列表+紅黑樹(shù),支持高并發(fā)操作
- key和value都不能為null
- 線(xiàn)程是安全的叙身,利用CAS算法和部分操作上鎖實(shí)現(xiàn)
- get方法是非阻塞渔扎,無(wú)鎖的。重寫(xiě)Node類(lèi)信轿,通過(guò)volatile修飾next來(lái)實(shí)現(xiàn)每次獲取都是最新設(shè)置的值
- 在高并發(fā)環(huán)境下晃痴,統(tǒng)計(jì)數(shù)據(jù)(計(jì)算size…等等)其實(shí)是無(wú)意義的,因?yàn)樵谙乱粫r(shí)刻size值就變化了财忽。