第11题为什么HashMap的数组长度必须是2的指数次幂回答核心原因HashMap的数组长度必须是2的指数次幂是为了通过高效的位运算替代低效的取模运算来计算元素的存储位置下标。背景知识当我们向HashMap中添加元素时需要根据key的哈希值计算出它在数组中的存储位置即索引。理论上可以通过取模运算hash % length来计算索引但取模运算在计算机中效率较低。HashMap采用了一种等价于取模运算的按位与运算(length - 1) hash前提是数组长度必须是2的指数次幂。为什么必须是2的幂如果数组长度是2的指数次幂如16、32、64那么length - 1的二进制表示就是全1如15的二进制是1111。此时按位与运算hash (length - 1)的结果等价于取模运算hash % length且效率更高。如果数组长度不是2的幂如10按位与运算的结果将不等于取模运算结果导致散列分布不均匀增加冲突概率。代码示例以下代码展示了位运算与取模运算的关系intlength16;// 数组长度为2的幂inthash25;// 假设哈希值为25// 取模运算intindex1hash%length;// 结果为9// 按位与运算intindex2hash(length-1);// 结果同样为9System.out.println(index1index2);// 输出 true面试官视角面试官可能会问“为什么位运算更高效”答位运算是直接操作二进制位CPU执行速度快而取模运算涉及除法操作性能较差。面试官可能会追问“如果数组长度不是2的幂会怎么样”答会导致散列分布不均冲突概率增加查询效率下降。