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

Java中用于文本字符串的64位哈希函数是什么?

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

Java中用于文本字符串的64位哈希函数是什么?

您为什么不使用

long
默认值的变体
String.hashCode()
(一些真正聪明的人肯定会努力使它变得高效-
更不用说已经看过此代码的数千名开发人员的眼睛了)?

// adapted from String.hashCode()public static long hash(String string) {  long h = 1125899906842597L; // prime  int len = string.length();  for (int i = 0; i < len; i++) {    h = 31*h + string.charAt(i);  }  return h;}

如果您要查找更多位,则可以使用“

BigInteger
编辑”:

正如我在对@brianegge的答案的评论中提到的那样,对于32位以上的哈希没有太多用例,对于64位以上的哈希,很可能没有一个用例:

我可以想象一个分布在数十个服务器上的巨大哈希表,也许存储了数百亿个映射。对于这种情况,@brianegge在这里仍然有一个有效的点:32位允许2 ^
32(约43亿)个不同的哈希键。假设算法很强大,您仍然应该有很少的冲突。使用64位(184,744,470.073十亿种不同的密钥),无论您需要哪种疯狂的方案,都可以节省。但是,对于128位密钥(340,282,366,920,938,463,463,374,607,607,431,030亿个可能的密钥)的用例的思考几乎是不可能的。

要组合多个字段的哈希,只需 将X 与一个素数相乘,然后将它们相加即可:

long hash = MyHash.hash(string1) * 31 + MyHash.hash(string2);

小质数在那里避免切换值具有相等的哈希码,即{‘foo’,’bar’}和{‘bar’,’foo’}不相等,应具有不同的哈希码。XOR不好,因为如果两个值相等,它将返回0。因此,{‘foo’,’foo’}和{‘bar’,’bar’}将具有相同的哈希码。



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

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

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