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