我只是想验证我的下面的理解,所以请建议。哈希映射哈希表大小限制小于数组索引的最大允许限制
在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
仅数据类型(索引数据类型)和其他逻辑要求(如两个幂等)。