加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:25:52 所属栏目:Java 来源:网络整理
导读:HashMap在内部与固定长度的数组一起使用,存储值的索引基于键的哈希值,如果使用collion作为哈希值,它将在该索引上创建一个链表,然后使用equals方法返回正确的值,而读. 我有一个自定义类,该类具有一个整数ID作为序列号,我将该类用作HashSet的“键”,并在hasCod

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

我有一个自定义类,该类具有一个整数ID作为序列号,我将该类用作HashSet的“键”,并在hasCode()方法中返回ID,这意味着HashSet的基础数组将寻找我从hasCode()返回以存储值的索引号N.

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

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

 int arrayIndex = abs(hashCode) % arraySize; 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读