Java Eclipse生成的equals使用1231和1237作为布尔值有什么特别的原因吗?

Java Eclipse生成的equals使用1231和1237作为布尔值有什么特别的原因吗?,java,eclipse,algorithm,code-generation,equals,Java,Eclipse,Algorithm,Code Generation,Equals,标题基本上说明了一切。我尝试过谷歌搜索,但返回了大量误报。我想我只是想知道,这两个特定的数字背后是否有一定的道理,或者它们可能很容易成为许多其他的数字 编辑:既然已经回答了数字的来源,那么布尔哈希码方法的作者为什么使用这些数字(除了它们是素数之外)呢?其他的素数也同样有效吗?这些数字来自官方。它们来自布尔方法。它们只是两个大的任意素数。参见他们显然是在抄近路调用Java核心 返回: 如果此对象表示true,则为整数1231;如果此对象表示false,则返回整数1237 可以找到更深入的讨论(尽管

标题基本上说明了一切。我尝试过谷歌搜索,但返回了大量误报。我想我只是想知道,这两个特定的数字背后是否有一定的道理,或者它们可能很容易成为许多其他的数字


编辑:既然已经回答了数字的来源,那么布尔哈希码方法的作者为什么使用这些数字(除了它们是素数之外)呢?其他的素数也同样有效吗?

这些数字来自官方。

它们来自布尔方法。它们只是两个大的任意素数。参见

他们显然是在抄近路调用Java核心

返回: 如果此对象表示true,则为整数1231;如果此对象表示false,则返回整数1237


可以找到更深入的讨论(尽管最终只是假设,而不是硬性的事实)。

哈希函数很容易被忽略。使用质数可以减少碰撞的次数(想想质数所具有的因素)。1231和1237都是素数

/e1
在做了更多的研究后,我发现:

因为它们很可能没有和 哈希表大小(除非素数本身除以哈希表大小), 在普通哈希表实现中发生冲突的可能性是 最小化


这仍然是一个问题,即这些人来自何处以及为什么

也许这是对从某人的办公室到员工自助餐厅的步数的最佳估计。或者某人女朋友的电话号码。谁知道呢

底线是,除非你找到《太阳报》的原创作者并询问他们,否则你永远不会知道真正的答案。(我假设他们仍然记得真正的答案,并准备告诉你!)


让我们继续…

如果有帮助的话,它们都是素数。它们可能的重复仍然会让人质疑它们来自何处以及为什么。同意,但这就是为什么Eclipse生成的equals使用它们的原因。所以这两个没有什么特别之处,只是它们是素数?那么,11和17也一样好吗?@AHungerArtist素数越大,函数就越安全。据我所知,这源于密码学,在密码学中,大素数相乘可以生成更大(而且相当安全)的代码密钥。@事实证明,素数越大,哈希表就必须越大,才能发生冲突。在这种情况下,在发生冲突之前,哈希表将有2462(2*1231)个存储桶。java开发人员为什么选择这些素数,最好留给他们一个问题。