【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
第20题HashMap在计算index的时候为什么要对数组长度做减1操作回答背景知识在HashMap中元素的存储位置索引通过位运算计算得出公式为index(length-1)hash;其中length是数组长度hash是key的哈希值。为什么要减1原因1数组长度是2的幂HashMap要求数组长度必须是2的指数次幂如16、32、64。如果数组长度是2的幂那么length - 1的二进制表示就是全1如15的二进制是1111。这样hash (length - 1)的结果等价于hash % length但效率更高位运算比取模运算快。原因2确保结果落在数组范围内位运算的结果最大只能是length - 1因此索引始终会落在数组的有效范围内不会发生越界。底层原理示例假设数组长度为16即length 16则length - 1 15其二进制为1111。对于任意哈希值hashhash 15的结果范围是0~15正好对应数组的索引范围。面试官视角面试官可能会问“为什么不直接用取模运算”答取模运算效率较低而位运算更快且等价于取模运算前提是数组长度是2的幂。面试官可能会追问“如果数组长度不是2的幂会怎么样”答会导致索引计算不均匀增加冲突概率影响性能。专栏大白话说Java面试题 — 01-Java基础篇