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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HashMap 与 ConcurrentHashMap

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HashMap 与 ConcurrentHashMap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

二、HashMap

  1、數據結構

  2、應用

  3、不要用 HashMap 做本地緩存

  一般我們聲明 HashMap 時,使用的都是默認的構造方法:HashMap<K, V>,但是它還有另外一個構造方法:HashMap(int initialCapacity, float loadFactor),其中參數 initialCapaticy 為初始容量,loadFactor 為加載因子;如果在默認情況下,一個 HashMap 的容量為 16,加載因子為 0.75,那么閾值就是 12,所以在往 HashMap 中 put 的值到達 12 時,它將自動擴容兩倍,如果兩個線程同時遇到 HashMap 的大小達到 12 的倍數時,就很可能會出現在將舊的 Entry[] 轉移到一個新的 Entry[] 的過程中出現問題,從而導致最終的 HashMap 的值存儲異常。

  再分析一下空間效率,拿 HashMap<Long, Long> 舉例。在 HashMap<Long, Long> 結構中,只有 Key 和 Value 所存放的兩個長整型數據是有效數據,共 16B (2 X 8B)。這兩個長整型數據包裝成 java.lang.Long 對象之后,就分別具有 8B 的 MarkWord、8B 的 Klass 指針,在加 8B 存儲數據的 long 值。在這兩個 Long 對象組成 Map.Entry 之后,又多了 16B 的對象頭,然后一個 8B 的 next 字段和 4B 的 int 型的 hash 字段,為了對齊,還必須添加 4B 的空白填充,最后還有 HashMap 中對這個 Entry 的 8B 的引用,這樣增加兩個長整型數字,實際耗費的內存為 (Long(24B)X2) + Entry(32B) + HashMap Ref(8B) = 88B,空間效率為 16B/88B = 18%,實在太低了。

三、ConcurrentHashMap

  1、數據結構

  2、應用

轉載于:https://www.cnblogs.com/JavaSubin/p/7751911.html

總結

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

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