为什么在hashCode中使用质数?

我只是想知道为什么在类的hashCode()方法中使用质数?例如,当使用Eclipse生成我的hashCode()方法时,总是使用素数31:

public int hashCode() {

final int prime = 31;

//...

}

回答:

因为您想要乘以的数量以及要插入的存储桶的数量具有正交素数分解。

假设要插入8个桶。如果您要用来乘以的数字是8的倍数,则插入的存储桶将仅由最低有效项(一个根本没有相乘)确定。类似的条目将发生冲突。不适用于哈希函数。

31是一个足够大的素数,因此不可能被它整除(实际上,现代的Java HashMap实现将存储桶的数量保持为2的幂)。

以上是 为什么在hashCode中使用质数? 的全部内容, 来源链接: utcz.com/qa/425162.html

回到顶部