代码之家  ›  专栏  ›  技术社区  ›  Sabir Khan

哈希映射哈希表大小限制小于数组索引的最大允许限制

  •  0
  • Sabir Khan  · 技术社区  · 10 年前

    我只是想验证我的以下理解,所以请提出建议。

    在Java中,正则数组的索引可以达到 int 类型为 2 raised to power 31 minus -1 从那时起 HashMap MAXIMUM_CAPACITY 是一个 整数 它也可以达到这个值。

    但自从 哈希图 内部需要表长度(桶大小)为 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 限制,但最大范围 整数 仅数据类型(索引数据类型)和其他逻辑要求(如二次幂等)。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    你是( more or less )正确的数组大小推理。

    但是内部数组的大小限制 HashMap.table 不限制的大小 HashMap (即可以存储在HashMap中的数字条目)。

    该数组中的每个元素实际上都是一个无限大小的Entry对象的链表,因此可以存储在HashMap中的条目数量没有严格限制。

        2
  •  1
  •   Peter Lawrey    10 年前

    数组的限制是2^^30,因为这是数组的最大二次幂。然而,没有理由建议哈希映射被限制在这个大小,而是在这一点上,哈希映射退化为链表(或Java 8中的树)的哈希,即每个桶中的条目数没有限制。