HashMap 容量为何要是 2 的指数幂?

HashMap在Java中是一个重要的数据结构,其容量要求为2的指数幂。这是因为2的指数幂在进行哈希寻址时能确保均匀分布,避免哈希冲突。当hashcode与length-1进行与运算时,2的指数幂形式可以覆盖所有可能的索引位置,保证高效存储和查找。文章探讨了不使用2的指数幂可能导致的寻址局限,并提及HashMap在JDK8后的实现包括数组、链表和红黑树。
摘要由CSDN通过智能技术生成

开足码力,码动人生,本文首发公众号【 程序员大帝 】,关注这个一言不合就开车的的代码界老司机
本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善

前言

HashMap 作为 Java 语言中经典的数据结构之一,在面试中出现的频率几乎是最多的。它本身有太多的点可以深入探讨,这里不得不佩服大神 Doug Lea 的水平,每一次读源码都感叹它的优美。

如果大家仔细看过源码的话,应该知道 HashMap 大小的初始值为16,如果要指定的话,必须是2的指数幂。

在这里插入图片描述

但是你有没有想过为什么要这样设计呢?其实背后的思路很巧妙,本篇文章我们就来探索一下。

正文

我们知道 HashMap 是一个 K-V 存储的数据结构,在 JDK8 之后升级为数组 + 链表 + 红黑树的形式。

当需要对KV对放入 HashMap 中时,会按照下面的步骤来完成:

(1)首先对 Key 做哈希运算,得到它的哈希值;

(2)根据哈希值值,按照 HashMap 的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值