This question already has answers here:
What is alternative hashing for String keys in Java 8?

(3个答案)


已关闭6年。




Hash32和字符串对象中的Hash有什么区别

在调试过程中,我发现String对象显示hash = 0和hash32 = 0,如下图所示。有些人可以解释显示它的原因。



谢谢回复

最佳答案

通过提供精心选择的键,可以“否定” HashMap s的性能优势,因此您会遇到很多冲突。这将HashMap的O(1)访问/时间减少为O(n),从而显着降低了性能。hash32是用于String的替代哈希算法的缓存值,因此,如果与默认算法的冲突过多,则可以使用其他算法来尝试减少冲突次数。来源here:

如果在任何特定存储桶中发生太多冲突,则Java 8中将HashMap重写为对TreeMap键使用临时Comparable s,这意味着性能从O(1)变为O(lg n),而不是O(1)到O (n)-重大改进。当String实现Comparable时,决定不再需要替代的哈希方案,因此将其删除。

10-05 23:26