内容来自《收割 Offer:互联网大厂面经》
原因如下:
(1)在数组长度为2的幂次方时 hahs % length 才等价于 hash & (length-1),定位 key 所在的哈希桶时位运算比求余更高效。
(2)避免破坏hash 函数的散列均匀性。如果容量是 2 的n次幂,那么容量减1对应的二进制形式为 ***1111,key 的 hash 值与它进行与运算时,结果完全取决于 key 的哈希值进行的与运算。
举个例子,HashMap的容量是16,容量减1的二进制是1111,与不同
key的hash值的与运算的结果如图1-28所示。
图1-28 HashMap的容量是16时与不同的hash值进行与运算的结果
假如容量为10(非2的n次幂),容量减1的二进制是1001,与不同key的hash值进行与运算的结果如图1-29所示。
图1-29 HashMap的容量是10时与不同的hash值进行与运算的结果