HashMap和ConcurrentHashMap
生活随笔
收集整理的這篇文章主要介紹了
HashMap和ConcurrentHashMap
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
HashMap:
線程不安全,不支持并發(fā)操作,鍵-值(key-value)都允許為空、、不保證有序
在 JDK1.7 中,HashMap 采用頭插法插入元素,因此并發(fā)情況下會導(dǎo)致環(huán)形鏈表,產(chǎn)生死循環(huán)。
雖然 JDK1.8 采用了尾插法解決了這個問題,但是并發(fā)下的 put 操作也會使前一個 key 被后一個 key 覆蓋。
由于 HashMap 有擴容機制存在,也存在 A 線程進行擴容后,B 線程執(zhí)行 get 方法出現(xiàn)失誤的情況。
默認(rèn)初始化容量為 16,擴容容量必須是 2 的冪次方、最大容量為 1<< 30 、默認(rèn)加載因子為 0.75。
HashMap底層是通過鏈表來解決hash沖突的。
數(shù)據(jù)結(jié)構(gòu)
JDK1.8之前:數(shù)組+鏈表
JDK1.8之后:數(shù)組+鏈表+紅黑樹(鏈表超過 8 會轉(zhuǎn)化為紅黑樹)
ConcurrentHashMap:
線程安全,支持并發(fā)操作,鍵-值(key-value)不允許為空
源碼:
數(shù)據(jù)結(jié)構(gòu)
JDK1.8之前:數(shù)組+數(shù)組+鏈表,
JDK1.8之后:數(shù)組+鏈表+紅黑樹
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的HashMap和ConcurrentHashMap的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RPC 技术及其框架 Sekiro 在爬
- 下一篇: 沉淀一年零八个月,我也拿到了博客专家