String对象中Hash32和Hash的区别是什么
调试时我发现String对象显示hash = 0和hash32 = 0,如下图所示.有些人可以解释它显示的原因.
谢谢回复
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,决定不再需要替代哈希方案,并将其删除.