【发布时间】:2012-01-24 13:01:16
【问题描述】:
我正在阅读 Joshua Bloch 的 Effective Java 的 Chapter 3。在Item 8: Always override hashCode when you override equals中,作者在他的哈希函数中使用了以下组合步骤:
result = 37 * result + c;
然后他解释了为什么选择 37(强调):
选择乘数 37 是因为它是一个奇素数。 如果它是偶数并且 乘法溢出,信息会丢失,因为乘法 乘二相当于移位。 使用素数的优点较少 很清楚,但传统上为此目的使用素数。
我的问题是为什么组合因子 (37) 奇数 很重要?无论因子是奇数还是偶数,乘法溢出不会导致信息丢失吗?
【问题讨论】:
标签: java overflow hashcode multiplication