开足码力,码动人生,本文首发公众号【 程序员大帝 】,关注这个一言不合就开车的的代码界老司机
本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善
前言
HashMap 作为 Java 语言中经典的数据结构之一,在面试中出现的频率几乎是最多的。它本身有太多的点可以深入探讨,这里不得不佩服大神 Doug Lea 的水平,每一次读源码都感叹它的优美。
如果大家仔细看过源码的话,应该知道 HashMap 大小的初始值为16,如果要指定的话,必须是2的指数幂。

但是你有没有想过为什么要这样设计呢?其实背后的思路很巧妙,本篇文章我们就来探索一下。
正文
我们知道 HashMap 是一个 K-V 存储的数据结构,在 JDK8 之后升级为数组 + 链表 + 红黑树的形式。
当需要对KV对放入 HashMap 中时,会按照下面的步骤来完成:
(1)首先对 Key 做哈希运算,得到它的哈希值;
(2)根据哈希值值,按照 HashMap 的寻址算法得到 index 值,也就是对应应该放入数组的位置;
index = hashcode & (le

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

被折叠的 条评论
为什么被折叠?



