Hashmap的长度为什么为2的幂

193 阅读1分钟

1.1 Hash介绍

1)构造方法

  1. 直接定址法:采用线性函数计算hashcode;
  2. 除留取余法:
  3. 数字分析法:根据关键字的进制,在每个位的出现频率;
  4. 平方取中法:取关键字平方的中间几位;
  5. 折叠法:分隔成位数相同的几部分,然后取这几部分的叠加和。

2)解决冲突的方法

  1. 线性探查法
  2. 平方探查法
  3. 再散列法
  4. 拉链法
  5. 建立公共溢出区

1.2 Hashmap的哈希索引求解

index = HashCode(Key) & (Length - 1) HashCodeObject中本身就有的方法,但是没有具体实现。而各个不同的数据类型又继承实现了各自的具体HashCode算法. 通过与Hashmap的长度相与得到哈希索引index。

为什么hashmap的长度length一定是2的幂?

因为求解哈希索引index的时候需要HashCode与(length-1)相与得到。Hash算法最终得到的index结果,完全取决于Key的Hashcode值的最后几位。 Length采用2的幂可以保证hash结果的均匀分布。若不采用2的幂会导致某些索引永运不会出现。比如与length=5,(101)会导致以11结尾的结果永远不会出现。违反hash均匀分布原则。