Eclipse生成的equals是否有任何特殊原因使用1231和1237的值作为布尔值?

AHu*_*ist 6 java eclipse algorithm code-generation equals

标题基本上都说明了一切.我尝试过谷歌搜索,但返回了大量的误报.我想我只是想知道这两个具体数字背后是否有一定的理由,或者他们是否很容易就有其他许多数字?

编辑:并且,由于数字的来源已被回答,布尔hashCode方法的编写者使用这些数字的任何理由(除了他们是素数)?其他任何一个素数都可以效果吗?

Bea*_*ham 6

这些数字来自官方的布尔API.

  • 同意,但这就是Eclipse生成的等于使用它们的原因. (4认同)

Jef*_*rey 4

哈希函数很容易发生冲突。使用素数可以减少碰撞次数(考虑一下素数所具有的因素)。1231和1237都是素数。

/e1
经过更多研究后,我发现了这一点

由于它们很可能与哈希表大小没有公约数(除非质数本身除以哈希表大小),因此公共哈希表实现中发生冲突的机会将被最小化。

  • @AHungerArtist 事实证明,素数越大,哈希表就必须越大,才会发生冲突。在这种情况下,在发生冲突之前哈希表将具有 2462 (2 * 1231) 个存储桶。为什么 Java 开发者选择*这些*素数这个问题最好留给他们。 (2认同)