首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中,对于文本字符串,什么是一个好的64位哈希函数?

在Java中,对于文本字符串,什么是一个好的64位哈希函数?
EN

Stack Overflow用户
提问于 2009-11-02 18:35:33
回答 8查看 55K关注 0票数 60

我正在寻找一个散列函数:

  1. 对文本字符串进行哈希处理效果很好(例如,很少冲突)
  2. 是用Java语言编写的,并且被广泛使用
  3. 奖励:适用于多个字段(而不是我将它们连接起来并对连接的字符串应用散列)
  4. 奖励:具有128位CPU不密集型。
EN

回答 8

Stack Overflow用户

发布于 2018-01-16 14:43:39

今天(2018)的答案。SipHash。

它将比这里的大多数答案快得多,并且比所有答案的质量都要高得多。

Guava库有一个:https://google.github.io/guava/releases/23.0/api/docs/com/google/common/hash/Hashing.html#sipHash24--

票数 5
EN

Stack Overflow用户

发布于 2009-11-02 18:49:51

Create an SHA-1 hash,然后掩码出最低的64位。

票数 4
EN

Stack Overflow用户

发布于 2009-11-02 19:42:56

代码语言:javascript
复制
long hash = string.hashCode();

是的,前32位将是0,但在遇到哈希冲突问题之前,您可能会耗尽硬件资源。字符串中的hashCode非常有效,并且经过了良好的测试。

sfussenegger更新我认为上面的方法满足了最简单的可能的工作,然而,我同意@sfussenegger扩展现有字符串hashCode的想法。

除了为字符串提供良好的hashCode之外,您可能还需要考虑在实现中重新散列散列代码。如果您的存储被其他开发人员使用,或者与其他类型一起使用,这可以帮助分发您的密钥。例如,Java的HashMap基于长度为2的幂的哈希表,所以它添加了这个函数来确保低位充分分布。

代码语言:javascript
复制
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1660501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档