谷歌搜索没有给我任何答案。1000003
但我觉得使用整数计算哈希码背后有逻辑和数学推理。
例如,AutoValue 将为给定的值类生成以下哈希码 -
@Override
public int hashCode() {
int h = 1;
h *= 1000003;
h ^= this.firstName.hashCode();
h *= 1000003;
h ^= this.lastName.hashCode();
h *= 1000003;
h ^= this.age;
return h;
}
这个特定整数背后的原因是什么?如果我使用 IntelliJ 创建一个被覆盖的hashcode
方法,它使用 integer 31
。
很想知道作者在想什么。
请注意,为什么在 hashCode 中使用素数?是一个类似的问题。但是,这通常是在询问哈希码中的素数,而这是在询问为什么要使用特定值1000003
(AutoValue
而不是例如不同的素数)。