我只是想驗證我的下面的理解,所以請建議。哈希映射哈希表大小限制小於數組索引的最大允許限制
在Java中,規則排列可以有指數高達int
類型,爲2 raised to power 31 minus -1
,自HashMap
MAXIMUM_CAPACITY
是int
過的最大值,它可以達到這個值了。
但由於HashMap
內部需要表長度(桶大小)是一個power of two
所以限制被縮減到 - static final int MAXIMUM_CAPACITY = 1 << 30;
因爲該值nearest power of two
到1<<31 -1
。
我的理解是否正確?
所有答案here提到只有符號位限制,但不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
僅數據類型(索引數據類型)和其他邏輯要求(如兩個冪等)。