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

时间:2019-02-28 22:41:41

标签: hash hashcode

如果我重写hashCode()方法,但使用非素数进行乘法运算,那么对于两个相同的对象,我仍然会获得相同的hashCodes。

如果我是对的,那么如果对象相同,则其哈希码也应相同。根据我之前的描述,即使使用非质数也可以实现。所以我想问,那么,使用质数如17或31的意义是什么?为什么我不能只使用非质数?

1 个答案:

答案 0 :(得分:0)

要使哈希表正常工作,要求如果两个对象相同,则哈希码必须相同。 “应该”是不够的:-)也就是说,即使对于非素数,哈希码也相同的原因是算法是确定性的。应该是。因此,这部分在您的实现中很好。

为什么要使用质数:原因是相反的情况:如果两个对象不同不同,那么如果哈希代码为不同。并非总是可能的,如果哈希码有时是相同的,那就很好。但通常情况下,应该有所不同。当使用质数时,事实证明,对于不同的对象,散列码更多地是不同的。其原因很复杂,涉及很多数学。有关详情,请参见此处:Why use a prime number in hashCode?