簡體   English   中英

在散列映射中可以進行多次重新散列

[英]How many times can rehashing occur in a hashmap

最近,我參加了面試,面試官問我這個問題。

一次HashMap中可以進行多次重組? 兩次? 或N次? [每次添加(閾值+1)元素時]

我知道當地圖已滿時,我們可能會做錯事。

我承認我無法給出滿意的答復。 誰能告訴我回答這些問題的方法。

或者,面試官究竟在尋找一個令人信服的答案?

以下是我在提出這個問題之前提到的一些問題。

https://stackoverflow.com/a/28811708 “當地圖中的元素數量達到閾值時,完成哈希映射的重新散列”HashMap的加載因子為0.75,默認初始容量值為16。元素的數量達到或交叉12元素容量的重新映射發生。

在Hashmap中重新散列

當哈希映射中的條目數超過加載因子和當前容量的乘積時,哈希映射將被重新哈希(內部數據結構被重建),因此哈希映射具有大約兩倍的桶數。 當您重新散列並將所有內容移動到新位置(存儲桶等)時,舊元素也會再次重新散列,並根據新的哈希碼存儲在新存儲桶中。 分配用於存儲元素的舊空間被垃圾收集。

https://stackoverflow.com/a/27384645/5086633

這取決於地圖的種類。

例如,對於HashMap,存在一個方法resize,定義如下:

將此映射的內容重新放入具有更大容量的新數組中。 當此映射中的鍵數達到其閾值時,將自動調用此方法。 如果當前容量為MAXIMUM_CAPACITY,則此方法不會調整映射大小,但會將閾值設置為Integer.MAX_VALUE。 這具有防止將來呼叫的效果。 參數: newCapacity新容量, 必須是2的冪; 除非當前容量為MAXIMUM_CAPACITY(在這種情況下值不相關),否則必須大於當前容量

因此,根據這個定義,可以將功率為2的步長放大到MAXIMUM_CAPACITY

MAXIMUM_CAPACITY的值是

static final int MAXIMUM_CAPACITY = 1 << 30;

該值為1.073.741.824。

構建一個新的HashMap表示初始容量為1,最多可以調整30個大小,因為2^30 = MAXIMUM_CAPACITY = 1.073.741.824

暫無
暫無

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

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