【发布时间】:2010-03-29 13:14:08
【问题描述】:
我正在阅读 Java 1.6 API 提供的 HashMap 类的代码,无法完全理解以下操作的需要(在 put 和 get 方法的主体中找到):
int hash = hash(key.hashCode());
方法hash() 具有以下主体:
private static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
这通过对提供的哈希码执行位操作来有效地重新计算哈希。即使 API 声明如下,我也无法理解这样做的必要性:
这很关键 因为 HashMap 使用长度为二的幂的哈希表,所以 否则会遇到没有不同的 hashCodes 冲突 在低位。
我确实了解键值 par 存储在数据结构数组中,并且该数组中项目的索引位置由其哈希确定。 我不明白的是这个函数如何为哈希分布增加任何价值。
【问题讨论】:
标签: java collections hashmap hash hashcode