为啥HashMap的长度一定是2的n次方

119 阅读1分钟

本文已参加【新人创作礼】活动,一起开启掘金创作之路。

直接说原因:

  1. 计算方便
  2. hash分布更均匀

计算方便

当HashMap长度为2的次方时,等式 hash(key) & (length - 1) == hash(key) % length 成立 解释: hash(key) % length 得到的结果 hash(key) - (hash(key) / length) * length 因为HashMap长度为2的次方,所以length - 1 的值转成二进制为全1的形式(2的次方一定是 1000…… 这种形式,再减去1,剩下的一定都是1,没有0),hash(key) & (length - 1) 结果是和hash(key) % length 等价的

hash分布更均匀

先解释一下hash均匀的含义:hashmap调用put方法,根据key通过hash函数计算的到table数组的下标,理想情况是table数组可以充分被利用,即hash均匀 计算table数组下标的方式为: hash(key) & (length - 1) & 运算有个特点,如果一个数的某一位为0,那么结果的对应位也为0 num1: 1111 num2: 1101 result: 1101 所以只有当length - 1为全 1时,才不会出现上述情况。

参考博客juejin.cn/post/684490… blog.csdn.net/zjcjava/art…