使用hashCode返回HashMap的巨大Integer ID

时间:2019-02-11 15:43:30

标签: java hashmap

HashMap在内部使用固定长度的数组,并且存储值的索引基于key的哈希值,如果使用collion作为哈希值,它将在该索引上创建一个链表,并且然后将使用equals方法在读取时返回正确的值。

我有一个自定义类,它具有一个Integer ID作为序列号,我将该类用作HashSet的'key',并在hasCode()方法中返回了ID,这意味着HashSet的基础数组将查找我从hasCode()返回以存储值的索引号N。

现在,即使我从Integer.MAX_VALUE - 1返回了hashCode()HashMap也可以将值存储在地图中。问题是,Integer.MAX_VALUE -1是否用作基础数组的索引?如果是,在创建实例时,HashMap是否会创建该大型数组?

1 个答案:

答案 0 :(得分:2)

不,不是这样。 Hashmap首先会分配一个由16个元素组成的数组,然后根据加载因子进行调整大小。因此,在哈希码返回不适合该数组甚至是负数的整数的情况下,可以使用一种简单的机制,如mod的绝对值。简化形式:

 int arrayIndex = abs(hashCode) % arraySize;