gpt4 book ai didi

java - 使用 hashCode 为 HashMap 返回巨大的 Integer id

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:15 26 4
gpt4 key购买 nike

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

我有一个自定义类,它有一个 Integer id 作为序号,我将这个类用作 HashSet 的 'key'hasCode () 方法我返回的是id,这意味着HashSet 的底层数组将寻找我从hasCode() 返回的索引号N 来存储值(value)。

现在,即使我从 hashCode() 返回 Integer.MAX_VALUE - 1HashMap 也能够将值存储在 map 。问题是,Integer.MAX_VALUE -1 是否用作底层数组的索引?如果是,HashMap 会在我们创建它的实例时创建那个巨大的数组吗?

最佳答案

不,事实并非如此。 Hashmap 最初会分配一个包含 16 个元素的数组,然后根据加载因子调整大小。因此,在哈希码返回一个不适合该数组的整数甚至负数的情况下,有一个简单的机制可以像 mod 的绝对值一样使用。简化形式:

 int arrayIndex = abs(hashCode) % arraySize; 

关于java - 使用 hashCode 为 HashMap 返回巨大的 Integer id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com