我正在寻找一个散列函数:
发布于 2018-01-16 14:43:39
今天(2018)的答案。SipHash。
它将比这里的大多数答案快得多,并且比所有答案的质量都要高得多。
发布于 2009-11-02 18:49:51
Create an SHA-1 hash,然后掩码出最低的64位。
发布于 2009-11-02 19:42:56
long hash = string.hashCode();
是的,前32位将是0,但在遇到哈希冲突问题之前,您可能会耗尽硬件资源。字符串中的hashCode非常有效,并且经过了良好的测试。
sfussenegger更新我认为上面的方法满足了最简单的可能的工作,然而,我同意@sfussenegger扩展现有字符串hashCode的想法。
除了为字符串提供良好的hashCode之外,您可能还需要考虑在实现中重新散列散列代码。如果您的存储被其他开发人员使用,或者与其他类型一起使用,这可以帮助分发您的密钥。例如,Java的HashMap基于长度为2的幂的哈希表,所以它添加了这个函数来确保低位充分分布。
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
https://stackoverflow.com/questions/1660501
复制相似问题