CS-Notes 学习笔记
Java 后端 · Java 容器

HashMap 是怎样扩容的?为什么容量是 2 的幂?

先自己想一想,再看参考要点

参考要点

  • 插入后 size 大于 threshold(capacity × 0.75)时容量翻倍,默认 16 时放入第 13 个键后变为 32
  • 扩容时按 hash & oldCap 是否为 0 把节点分到 j 和 j + oldCap 两个位置,保持相对顺序
  • 容量是 2 的幂时,hash & (capacity - 1) 只保留 hash 的低位,hash 非负时与 hash % capacity 相同(hash 为负时 % 可能得到负数,与运算仍是合法下标),位运算比取模快,扩容也只需看一位
  • 长度不是 2 的幂时 length - 1 中有为 0 的位,一部分桶永远用不到
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。