2013-11-20 61 views
0

按我的理解,我讀地圖客座率,地圖是如何生長的

加載因子是哈希表是如何充分允許之前把它的容量會自動增加

措施

因此,當負載因數爲.8(80%),地圖大小爲10時,Map將增加10,當Map中放置8個元素時。

所以,現在Map有20的大小。我懷疑是什麼時候將下一個10元素空間添加到Map

  • Map再次填滿80%,即16個元素放入Map時。

  • 當18個元件置於Map

回答

1

這將是16.如果你看一下Java代碼HashMap

threshold = (int)(newCapacity * loadFactor); 

其中新增產能新的大小。因此,在你的例子中的限制將是16.

1

80%的負載因子,所以有16個元素。它將根據當時所在元素的總量和當時的最大容量計算調整大小。

它不記錄上次調整大小。

1

A HashMap有一個size()capacity,這些是兩個不同的東西。 Capacity是散列表的內部大小,並且始終是2的冪,因此HashMap不能有容量20. Size是用戶放入此映射的散列條目的數量。

在聲明HashMap

Map map = new HashMap(20) 

它的實際容量是32和閾值是24,它的大小是零。

Map map = new HashMap() 

對於這種情況映射具有大小0和缺省容量16.

threshold = (int)(newCapacity * loadFactor) = 32 * 0.8 = 25; 

即25爲負載係數0.8。因此,只要您的地圖達到25個條目的大小,它將被調整爲包含相同25個條目的容量64。

0

每當地圖調整大小時,閾值重新計算爲;

threshold = (int)(newCapacity * loadFactor); 

所以,在你的榜樣,這將是16

請參考HashMap的here的來源。