HashMap下标计算详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap下标计算详解相关的知识,希望对你有一定的参考价值。

参考技术A HashMap 计算方法为:(n - 1) & hash 具体见putVal
解读:由于n-1高位全部为0 因此(n - 1) & hash只会得到一个小于等于n-1的值,即在桶长度取值范围内.
为何不用取余运算,写一段模拟程序,我们来对比下速度:

运行结果:

我们把数字改成5

&位运算速度快于%,缺点:某些奇数如5 时分布不均匀。
联系下另一个方法:tableSizeFor 会将我们传入容量返回为2的倍数。经过实际测试 16 ,32 &位运算比较均匀。

HashMap集合put元素的原理

HashMap集合put元素的原理:
(1)计算key的hashCode
(2)将key的hashCode作为计算因子,通过哈希算法计算HashMap的数组下标index
(3)如果index下标的数组元素为空,直接put(新增元素)
(4)如果index下标的数组元素不为空,调用key的equal方法,判断index位置的链表是否存在
(5)如果找到链表中某个元素与key的equals方法相等,则使用value更新
(6)如果未找到链表中某个元素与key的equals方法相等,则新增
一般面试的时候,经常会问到HashMap的原理。起初一直不理解,搞清楚HashMap的原理很重要吗?我就知道HashMap是线程不安全的。后来仔细看了下HashMap的底层实现原理,
原来HashMap既具有数组的快速查询,又兼具链表的快速插入特性。虽然不是线程安全的,但通过线程安全处理之后,无论是查询还是添加元素都很高效,用途广泛,因此掌握HashMap的底层原理的重要性不言而喻了。

以上是关于HashMap下标计算详解的主要内容,如果未能解决你的问题,请参考以下文章

HashMap重点详解

HashMap集合put元素的原理

Java8 HashMap详解

Java8 HashMap详解(转)

HashMap源码分析

HashMap和ConcurrentHashMap的区别,HashMap的底层源码。