日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java高并发(二十)HashMap与ConcurrentHashMap

發布時間:2024/9/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java高并发(二十)HashMap与ConcurrentHashMap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HashMap

HashMap底層就是一個數組,而數組的每一項都是一個鏈表,當我們新建一個HashMap時就會初始化一個數組。HashMap有兩個參數影響性能,分別是初始容量和加載因子。?

HashMap尋址方式:對于一個新插入的數據或者需要讀取的數據,HashMap需要根據key按照一個計算規則計算出Hash值并對我們的數組長度進行取模,取模結果作為數組的index,而取模的代價遠遠高于位運算的代價,因此HashMap的數組長度必須是2的N次方,將計算出的Hash值和2的N-1次方進行“與”運算,結果與取模操作是相同的。

HashMap并不要求用戶在指定HashMap容量時必須傳入一個2的N次方的整數,而是在初始化時根據傳入的容量值計算出一個滿足2的N次方的容量。

總所周知HashMap不是一個線程安全的,主要體現在執行resize方法時可能會產生死循環,當HashMap的size超過他的容量*負載因子時,就需要對HashMap擴容,具體方法是創建一個新的原來容量的兩倍的數組(保證新的容量仍然是2的N次方,從而保證上述的尋址方式仍然適用),同時把原來的數組重新插入到新的數組中,這一過程并不保證線程安全,而且在多線程并發調用時可能會產生死循環。

上面是單線程下reHash的擴容步驟。

在多線程情況下:

ConcurrentHashMap

數據結構:

使用了紅黑樹來提高性能。

總結

以上是生活随笔為你收集整理的java高并发(二十)HashMap与ConcurrentHashMap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。