【问题标题】:Generating hashCode from multiple fields? [duplicate]从多个字段生成hashCode? [复制]
【发布时间】:2015-04-21 00:43:20
【问题描述】:

如何从类中的两个字段生成 hashCode?​​p>

例如,我希望具有相同对象 V 的 Pair 类具有相同的 hashCode:

public class Pair<V> {
    V from, to;
}

我应该将它们的 hashCode 相乘吗?添加它们?将它们乘以素数?

【问题讨论】:

  • 看看lombok 是如何实现它可能会有所帮助
  • 已经有 的问题与此相关。有什么不清楚的地方吗?

标签: java hash hashcode


【解决方案1】:

一种方法是将第一个字段的哈希码与第二个字段的哈希码相加,再乘以一个小的素数,如下所示:

public int hashCode() {
    return 31 * from.hashCode() + to.hashCode();
}

【讨论】:

  • 这里应该有括号吗?似乎解释与代码不符。
  • 不,没有括号
  • 为什么是 31 而不是更小的素数,比如 2?
  • @TrangOul 没有特别的理由使用任何特定的素数。不过,我不会选择 2,因为它是唯一的偶数素数,因此在二进制表示中乘以它将相当于一个简单的移位。换句话说,结果将等同于(from.hashCode() &lt;&lt; 1) + to.hashCode()。虽然这种方法没有什么特别的错误,但通常人们更愿意在各个哈希码的位之间“混合”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多