使用2的幂可以有效地屏蔽哈希码的最高位。因此,在这种情况下,劣质哈希函数的性能可能会特别差。
Java
HashMap通过不信任对象的
hashCode()实现并对结果进行第二级哈希处理来缓解这种情况:
将补充哈希函数应用于给定的hashCode,以防止质量差的哈希函数。这很关键,因为HashMap使用2的幂的哈希表,否则哈希表在低位无差异时会遇到冲突。
如果您具有良好的哈希函数,或执行类似的
HashMap操作,则是否使用质数等作为表大小都没有关系。
另一方面,如果哈希函数的质量未知或质量较差,那么使用质数将是更安全的选择。但是,这将使实现动态大小的表变得更加棘手,因为突然之间,您需要能够产生质数,而不仅仅是将大小乘以一个常数。



