在 Java 面试中,HashMap 相关的问题是面试官最喜欢考察的知识点之一,尤其是 HashMap 的哈希算法,以及由此引发的一个关键问题——“为什么 HashMap 每次扩容都是两倍?”。
对于初学者来说,理解哈希算法可能会有些困难。因此,本文将用 三个核心步骤 拆解 HashMap 的哈希计算逻辑,并从这一原理出发,深入探讨 HashMap 采用 2 倍扩容 的原因。希望你读完后能对这个问题有更深入的理解。
文章目录
1. 三步理解HashMap的哈希算法
在理解扩容问题前,我们需要先理解HashMap的哈希算法,主要包括以下三步:
在分析 HashMap 的扩容机制之前,我们需要先弄清楚 HashMap 是如何计算存储索引的,这个过程主要包括以下三步:
(1) 计算哈希值:调用 hashCode()
当我们向 HashMap 插入键值对时,JDK 首先会调用 hashCode() 方法计算 key 的哈希值。例如:
String key = "HashMap";
int h = key.hashCode(); // 计算哈希码 h
hashCode() 返回一个 32 位的整数(范围:-2147483648 ~ 2147483647),理论上可能产生 40 亿种不同的 key。如果直接使用 hashCode() 作为数组索引,那就意味着数组的长度需要达到 40 亿,这显然是不现实的。因此,HashMap 并不会直接使用 hashCode(),而是对其进行 进一步处理,使其能映射到合适的数组索引。

最低0.47元/天 解锁文章
1万+

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



