簡體   English   中英

ConcurrentHashMap超過容量

[英]ConcurrentHashMap over the capacity

我是ConcurrentHashMap的新學員。 現在我寫下面的代碼:

ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap(1);

for(int i=0; i<10; i++){
    map.put(i,i);
}

//print map

我將ConcurrentHashMap的初始容量設置為1,然后我將10個值放入其中。 所以在我看來,ConcurrentHashMap只接收第一個並拒絕其余的9個; 但是,當我打印地圖時,我發現所有10個值都已存儲在地圖中。 那么它是否沒有使用初始容量參數,或者如果達到容量,ConcurrentHashMap可以自行增加?

初始容量是對哈希映射將包含多少元素的粗略估計。 一旦開始添加更多元素,哈希映射的大小將增加(線性或指數)。 增加哈希映射的大小會產生開銷。

讓我們說你需要一個哈希映射,它將包含穩定狀態下的100萬個密鑰。 然后你可能會用50k大小初始化哈希映射。

另一方面,如果您的哈希映射只包含穩定狀態下的1000個鍵,那么您可能會使用較小的值進行初始化。

編輯:

假設linear resizing ,對於100萬個鍵,如果初始化值為50,那么每次添加50個元素時,java必須調整大小(這將涉及復制)。 調整大小的數量大約為20.但如果您使用值初始化為500,則只調整兩次。

JVM會自動增加大小。 容量僅用於初始化任何集合將映射備份到特定大小。 如果您確定要向其添加至少X個項目,則將其初始化為該容量。 JVM將根據需要為您調整大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM