284 字
1 分钟
HashMap 扩容机制:容量翻倍后的高低位迁移
HashMap 无参构造的默认初始容量为 16,负载因子为 0.75,桶数组通常在第一次插入时才分配。普通插入路径中,当新 key 使元素数量超过阈值时,会创建容量翻倍的新数组并迁移节点。例如容量 16、阈值 12 时,插入第 13 个不同 key 通常触发扩容;冲突导致的树化判断也可能促使小数组提前扩容。
JDK 8 的迁移优化
容量翻倍后,节点无需重新做完整的取模计算。根据节点 hash 与旧容量对应位的关系,它只有两种去向:
旧下标旧下标 + 旧容量这利用了数组容量始终为 2 的幂这一特性:相关位为 0 时节点留在原位置,为 1 时移动到“原位置 + 旧容量”。因此扩容过程减少了重新计算 hash 的开销,提高了迁移效率。
复习要点回答扩容时,依次说明“阈值触发 → 新数组容量翻倍 → 节点高低位分流”即可覆盖关键过程。
HashMap 扩容机制:容量翻倍后的高低位迁移
https://blog.xqcherry.top/posts/interview/java/hashmap-resize/ 目录