使用非素数时的相同哈希码

问题描述 投票:0回答:1

如果我覆盖hashCode()方法但使用非素数进行乘法,我仍然可以获得两个相同对象的相同hashCodes。

如果我是正确的,如果对象是相同的,它们的哈希码也应该是相同的。根据我之前的描述,即使使用非素数也可以实现。所以我想问一下,那么使用17或31这样的素数是什么意思呢?为什么我不能只使用非素数?

hash hashcode
1个回答
0
投票

要使哈希表起作用,如果两个对象相同,则需要哈希码相同。 “应该是”同样不够好:-)也就是说,即使对于非素数,哈希码也是相同的原因是算法是确定性的。应该是哪个。这部分在你的实现中很好。

为什么要使用素数:原因是相反的情况:如果两个对象不相同,那么如果哈希码也不同则会很好。它并不总是可能的,如果哈希码有时是相同的,那就没关系。但通常情况下应该是不同的。使用素数时,事实证明,对于不同的对象,哈希码更常见。之所以相当复杂,涉及很多数学。详情请见:Why use a prime number in hashCode?

© www.soinside.com 2019 - 2024. All rights reserved.