为什么HashMap要求初始容量是2的幂?

13 浏览
0 Comments

为什么HashMap要求初始容量是2的幂?

我在查看Java的HashMap源代码时,看到了以下内容:

//默认初始容量 - 必须是2的幂。
static final int DEFAULT_INITIAL_CAPACITY = 16;

我的问题是,为什么一开始就存在这个要求?我还注意到,允许使用自定义容量创建HashMap的构造函数会将其转换为2的幂:

int capacity = 1;
while (capacity < initialCapacity)
  capacity <<= 1;

为什么容量必须始终是2的幂?

此外,当执行自动重新哈希时,会发生什么?哈希函数是否也会改变?

0