HashMap中如何根据key算出元素的存储位置

本文详细解析了JDK7中HashMap的数据结构,包括其核心算法hash和indexFor方法。hash方法用于将Object类型转换为整型,而indexFor方法则通过位运算将hash值转化为数组下标,优化了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK7中,根据Object类型的key计算出其在数组中的下标位置,HashMap的数据结构是数组+链表。由2个方法hash(Object key)和indexFor(int h,int length)来实现。

hash :该方法主要是将Object转换成一个整型。
indexFor :该方法主要是将hash生成的整型转换成链表数组中的下标。

static int indexFor(int h, int length) {
    return h & (length-1);
}

indexFor方法其实主要是将hashcode换成链表数组中的下标。h表示元素的hashcode值,length就是HashMap的容量。h & (length-1)其实就是h对length进行取模,之所以换成位运算,是出于效率问题考虑。使用位运算代替了取模运算。之所以可以做等价代替,前提是要求HashMap的容量一定要是2^n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值