Java 哈希码生成代码在其计算中经常使用质数。这有充分的理由,如为什么在 hashCode 中使用质数? 和其他地方所解释的那样。
例如,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;
}
AutoValue 使用特定整数
1000003
而不是其他素数的原因是什么?如果我使用 IntelliJ 创建一个重写的 hashCode
方法,它使用整数 31
。使用整数1000003
而不是其他一些素数来计算哈希码背后是否有一些逻辑和数学推理?谷歌搜索没有给我任何答案。
很想知道作者在想什么。