【大白话说Java面试题】【Java基础篇】第18题:HashMap底层是如何扩容的
第18题HashMap底层是如何扩容的回答扩容条件HashMap的初始容量为16默认负载因子为0.75。当元素个数超过capacity * loadFactor即16 * 0.75 12时会触发扩容。扩容过程容量翻倍数组长度变为原来的2倍如从16扩展到32。扩容后的新数组长度始终是2的幂确保散列分布均匀。重新计算索引每个元素都需要重新计算其存储位置index。新索引通过(length - 1) hash计算得出。数据迁移将旧数组中的元素迁移到新数组中。在JDK1.7中采用头插法进行迁移可能导致死循环问题见第15题。在JDK1.8中改用尾插法避免了死循环问题。红黑树处理如果桶内是红黑树节点可能需要重新拆分为链表或保持红黑树结构具体取决于迁移后的节点数量。限制条件数组的最大长度为Integer.MAX_VALUE即2^31 - 1。扩容后的负载因子最大只能达到2^30。面试官视角面试官可能会问“为什么扩容是2倍”答扩容为2倍可以保证数组长度始终是2的幂从而利用位运算高效计算索引。面试官可能会追问“扩容时为什么要重新计算索引”答因为扩容后数组长度变化(length - 1) hash的结果也会变化因此需要重新计算每个元素的位置。专栏大白话说Java面试题 — 01-Java基础篇