Java字符串对象中Hash32和Hash之间的区别

Jav*_*ner 5 java string

String对象中Hash32和Hash的区别是什么

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

在此输入图像描述

谢谢回复

awk*_*ksp 7

HashMaps 的性能优势可以通过精心选择的键来"消除",这样就可以获得大量的碰撞.这减少了O(1)访问/ a HashMap到O(n)的任何时间,从而显着降低了性能.

hash32是用于Strings 的替代散列算法的缓存值,因此如果与默认算法的冲突太多,则可以使用不同的算法来尝试减少冲突的数量.来源在这里:

Java SE 7u6引入了改进的替代哈希函数......

当遇到大量密钥哈希冲突时,备用哈希函数可提高这些映射实现的性能.

替代散列函数仅适用于String类型的键.

HashMap在Java 8中重写,如果任何特定存储桶的冲突太多,则使用ad-hoc TreeMaps作为Comparable密钥,这意味着性能从O(1)变为O(lg n)而不是O(1)变为O(n) - 一项重大改进.作为String实施Comparable,决定不再需要替代哈希方案,并将其删除.