为什么@AutoValue注解使用特定的整数1000003来计算哈希码?

问题描述 投票:0回答:0

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
而不是其他一些素数来计算哈希码背后是否有一些逻辑和数学推理?谷歌搜索没有给我任何答案。

很想知道作者在想什么。

java equals hashcode equality auto-value
© www.soinside.com 2019 - 2024. All rights reserved.