代码之家  ›  专栏  ›  技术社区  ›  Toseef Zafar

使用hashcode返回hashmap的大整数id

  •  3
  • Toseef Zafar  · 技术社区  · 6 年前

    HashMap 在内部使用固定长度数组,存储值的索引基于 key ,如果是collion for hash,它将在该索引上生成一个链接列表,然后使用 equals 方法在读取时返回正确的值。

    我有一个自定义类 Integer id作为序列号,我使用这个类作为 'key' 散列集的 hasCode() 方法I返回ID,这意味着 HashSet 将查找返回的索引号n HasCODE() 以存储值。

    现在,即使我回来了 Integer.MAX_VALUE - 1 hashCode() 这个 哈希图 能够将值存储在地图中。问题是 Integer.MAX_VALUE -1 用作底层数组的索引?如果是的话 哈希图 当我们创建它的实例时创建这个巨大的数组?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sleiman Jneidi    6 年前

    不,不是这样的。hashmap最初会分配一个由16个元素组成的数组,然后根据加载因子调整大小。因此,在散列代码返回一个不适合该数组的整数,甚至是一个负数的情况下,有一个简单的机制可以像mod的绝对值一样使用。以简化的形式:

     int arrayIndex = abs(hashCode) % arraySize;