HashMap中类似的Strings是否会导致发生碰撞的机会增加?

HashMap中类似的Strings是否会导致发生碰撞的机会增加?,第1张

HashMap中类似的Strings是否会导致发生碰撞的机会增加?

不,不会。那 不一定 是因为

String#hashpre
; 但是因为a
HashMap
会通过对最后16个16位进行XOR运算来重新哈希您的哈希码。

// this is re-hashing that is done internallystatic final int hash(Object key) {    int h;    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}

但是,即使那 增加碰撞,您也可能永远不会感觉到。对于将条目逐个放置(以链接的方式)的小桶/箱,

equals
将被调用以获取您关心的 实际
条目。

如果某个仓位/存储桶达到某个阈值,它将被转换为

perfectly balanced tree node
。这样的树中的搜索时间为
0(logn)

即使 相同的条目在重新哈希 报告了相同的哈希码,如果出现平局,地图也必须决定哪个条目 较大

然后

Comparable#compareTo
,如果您的键实现了Comparable
,它将尝试调用。如果他们不执行
Comparable
System.identityHashpre
将在平局的情况下决定。

从性能角度来说,由于所有这些内部因素,您的平均搜索时间将

O(1)
在地图中。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5013841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存