Java doc hash
方法说明,
检索对象哈希码并将补充哈希函数应用于结果哈希,以防止质量差的哈希函数.这很关键,因为HashMap使用两个幂的长度哈希表,否则会遇到低位不同的hashCodes的冲突.
我无法理解的是,
1)为什么HashMap使用2的幂长度哈希表?
在声明表时也说明了这一点:
/**
* The table, resized as necessary. Length MUST Always be a power of two.
*/
transient Entry<K,V>[] table;
Run Code Online (Sandbox Code Playgroud)
为什么这个约束?
2)否则会遇到低位不相同的hashCode的冲突.意思?
当 HashMap 需要调整大小时,它会创建一个新的存储桶数组,使用这些存储桶进行访问hashCode()
(通过少量的额外操作将 hashCode 映射int
到 hashMap 中的存储桶数量)。
该数组大小的 2 次幂允许将int
hashCode 巧妙地映射到存储桶编号 - 基本上仅使用 hashCode 的较低部分(屏蔽较高部分)来寻址存储桶。