开足码力,码动人生,本文首发公众号【 程序员大帝 】,关注这个一言不合就开车的的代码界老司机
本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善
前言
HashMap 作为 Java 语言中经典的数据结构之一,在面试中出现的频率几乎是最多的。它本身有太多的点可以深入探讨,这里不得不佩服大神 Doug Lea 的水平,每一次读源码都感叹它的优美。
如果大家仔细看过源码的话,应该知道 HashMap 大小的初始值为16,如果要指定的话,必须是2的指数幂。
但是你有没有想过为什么要这样设计呢?其实背后的思路很巧妙,本篇文章我们就来探索一下。
正文
我们知道 HashMap 是一个 K-V 存储的数据结构,在 JDK8 之后升级为数组 + 链表 + 红黑树的形式。
当需要对KV对放入 HashMap 中时,会按照下面的步骤来完成:
(1)首先对 Key 做哈希运算,得到它的哈希值;
(2)根据哈希值值,按照 HashMap 的