簡體   English   中英

Hashmap哈希表大小限制小於數組索引的最大允許限制

[英]Hashmap hashtable size limit less than max allowed limit for array index

我只想驗證我的以下理解,請提出建議。

在Java中,常規數組的索引最大為int類型的最大值,該索引是2 raised to power 31 minus -1 HashMap 2 raised to power 31 minus -1並且由於HashMap MAXIMUM_CAPACITY也是int ,因此它也可以達到該值。

但是由於HashMap內部需要表長度(存儲桶大小)為2的power of two因此限制被縮減為- static final int MAXIMUM_CAPACITY = 1 << 30; 因為該值是2的nearest power of two 1<<31 -11<<31 -1 nearest power of two

我的理解正確嗎?

此處的所有答案僅提及符號位限制,而不涉及兩個要求的

/**
     * The table, resized as necessary. Length MUST Always be a power of two.
     */

transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;

另外,我了解arrayHashmap大小限制(存儲桶大小)與system / object / heap memory限制無關,但max_range僅用於int數據類型(索引數據類型)和其他邏輯要求(例如2的冪等) 。

您對數組大小的推理( 或多或少 )是正確的。

但是內部數組HashMap.table的大小限制並不限制HashMap的大小(即,可以存儲在HashMap中的數字條目)。

該數組中的每個元素實際上都是大小不受限制的Entry對象的鏈接列表,因此,可以存儲在HashMap中的條目數量沒有硬性限制。

數組的限制為2 ^^ 30,因為這是數組可以擁有的2的最大乘方。 但是,沒有理由建議哈希圖限制為該大小,而是圍繞這一點,哈希圖降級為鏈接列表(或Java 8中的樹)的哈希,即沒有限制。每個存儲桶中的條目數。

暫無
暫無

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

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