hashmap数据结构详解(三)之hashcode实例及大小是2的幂次方解释

本文深入探讨了HashMap数据结构的基础知识及其在Java中的实现细节,包括负载因子的作用、hashcode的计算方法,以及如何通过使用2的幂次方来确保元素分布均匀。同时对比了HashMap与HashTable、ConcurrentHashMap的不同之处。

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

hashmap数据结构详解(一)之基础知识奠基

hashmap数据结构详解(二)之走进JDK源码

hashmap数据结构详解(三)之hashcode实例及大小是2的幂次方解释

hashmap数据结构详解(四)之hashmap过程综述

hashmap数据结构详解(五)之HashMap、HashTable、ConcurrentHashMap 的区别


关于hashmap大小为2的幂次方解释:

在详解(二)中提到过负载因子这个东西是用来平衡的,尽量让节点分布均匀。关于2的幂次方,最重要的一点也是关于分布是否均匀。

下面举例:

正面例子:

一个hashcode值为:  

十进制:3029737

二进制的1011100011101011101001

长度为:16

 

但是对于取得hash的index值算法是:

index= HashCode(Key) & (Length -1)

 

所以上面的例子:

hashcode: 10 1110 0011 1010 1110 1001

length: 1111

index:  1001

 

1001则是index = 9.

---------------------------------------------------------------------------

---------------------------------------------------------------------------

反面例子:

但是如果说   长度大小为10,继续实例:

 

hashcode: 10 1110 0011 1010 1110 1001

length: 1001

index:  1001

 -------------------------------------------

 

hashcode: 10 1110 0011 1010 1110 1011

length: 1001

index:  1001

 

那么现在就出现问题了,如果说:长度是10,即length-1 = 1001,那么中间两位就永远不会为1,则有部分index永远不会有映射的值。而其余的概率大大增加。所以不满足均匀分布的条件。

*****所以   new HashMap<>(11); 这种情况下,需要内部调整为  合适的 2 的幂次方的整数值。 而 loadFactor 是用于 数组大小 x 加载因子 = 容器的阈值 ,引发扩容机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值