【大白话说Java面试题】【Java基础篇】第12题:为什么HashMap的初始容量是16

0 阅读1分钟

第12题:为什么HashMap的初始容量是16

📚 回答:

  • 前提条件
    HashMap要求数组长度必须是2的指数次幂,因此初始容量也必须满足这一条件。

  • 为什么选择16?

    • 空间占用 vs 查询效率
      • 初始容量过小(如4或8)会导致频繁扩容,增加性能开销。
      • 初始容量过大(如32或64)会浪费内存空间,尤其在数据量较小时。
      • 16是一个经验值,在空间占用和查询效率之间做了权衡,既能避免频繁扩容,又不会浪费过多内存。
  • 扩容机制的影响

    • HashMap每次扩容为原容量的2倍,初始容量为16可以确保后续扩容时数组长度始终是2的幂。
    • 这样既保证了散列分布均匀,又简化了扩容逻辑。

    💡 面试官视角

  • 面试官可能会问“为什么不是其他2的幂,比如8或32?”答:8可能太小,容易触发扩容;32可能太大,浪费内存;16是一个折中值,适合大多数场景。

  • 面试官可能会追问“如何自定义初始容量?”答:可以通过构造方法指定初始容量,如new HashMap<>(32)


📌 专栏:大白话说Java面试题 — 01-Java基础篇