如果我覆盖了hashcode()方法,但是使用非质子数进行乘法,我仍然可以获得两个相同对象的载量。
如果我是正确的,则如果对象相同,则其哈希码也应该相同。在我以前的描述中,即使使用非质数也可以实现这一点。所以我想问,那么使用素数(例如17或31)的意义是什么?我为什么不能只使用非质子数?
为要工作的哈希表,如果两个对象相同,则必需的哈希代码相同。"应该是"不够好:-)说,即使非质量数字也是算法是确定性的,因此哈希码是相同的原因。应该是。因此,该部分在您的实施中很好。
为什么要使用质数:原因是反向情况:如果两个对象不是相同,那么如果哈希码也是是不同的。这并非总是可能的,如果哈希代码有时是相同的,那很好。但通常情况下,应该有所不同。当使用质数时,事实证明,对于不同的对象,哈希代码通常是不同的。之所以很复杂,涉及很多数学。有关详细信息,请参见此处:为什么在hashcode中使用质号?