![](/img/trans.png)
[英]How to print a database in HashMap that is less than or equals to the given limit?
[英]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 -1
至1<<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;
另外,我了解array
或Hashmap
大小限制(存儲桶大小)與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.