栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

HashMap中的Hash方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HashMap中的Hash方法

设计通用哈希码的问题之一是,您将所有这些工作都放在了确保良好的位扩展上,然后有人来使用并以完全撤消的方式使用它。

让我们以一个带有X和Y(均为整数)的坐标类的经典示例为例。

这是一个经典的示例,因为人们会用它来证明这

X ^ Y
不是一个很好的哈希码,因为通常会有多个对象,其中
X == Y
(所有哈希都为0)或X和Y为Y和X的对象其他(将散列相同)和其他情况下,我们最终得到相同的散列码。

归结为一个事实,虽然整数的可能范围涵盖40亿个值,但在99%的使用中,它们最多最多不到几百或几万。我们永远无法避免尝试在40亿个可能的结果中分散18个四十亿可能的值,但是我们可以努力使我们实际看到的值减少冲突的可能性。

现在,

(X << 16 | X >> 16) ^
Y在这种情况下做得更好,将来自X的位分散更多。

不幸的是,如果使用此哈希

% someBinaryRoundNumer
来索引表(甚至
% someOtherNumber
在较小程度上),则对于低于X的值(
someBinaryRoundNumber
我们可以预期是最常见的),此哈希有效return Y。

我们所有的辛苦工作被浪费了!

所使用的重新哈希方法是使用这种逻辑进行哈希方法,效果略好。

值得一提的是,过于批评这种

(X << 16 | X >> 16) ^ Y
方法是不公平的,因为对哈希的另一种使用可能具有优于给定替代方法的形式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号