Андрей Козицкий Asked:2020-05-09 03:59:31 +0000 UTC2020-05-09 03:59:31 +0000 UTC 2020-05-09 03:59:31 +0000 UTC 为什么在计算 String 和 Integer 类中的哈希时使用 31(肯定在这些中) 772 为什么在计算 String 和 Integer 类中的哈希时使用 31(肯定在这些中) 例如(但可以是另一个数字)返回 x*31 +y; java 1 个回答 Voted Best Answer Андрей 2020-05-09T04:27:27Z2020-05-09T04:27:27Z 布洛赫在他的书中写道:选择 31 是因为它是一个奇数和质数。奇数 - 最低有效位为 1,当向左移动(乘以 2)时,溢出时会保留一些内容。简单就是传统。另外,乘以 31 可以表示为 31 * i == (i << 5) - i,优化是可能的(移位和减法更快)。
布洛赫在他的书中写道:选择 31 是因为它是一个奇数和质数。奇数 - 最低有效位为 1,当向左移动(乘以 2)时,溢出时会保留一些内容。简单就是传统。另外,乘以 31 可以表示为 31 * i == (i << 5) - i,优化是可能的(移位和减法更快)。