在我们组织的特定用例中,我选择使用MurmurHash3(128位版本)来确定由多个元素组成的记录与另一个记录相比是否是唯一的。关于使用散列来确定唯一性的智慧的算法和争论的选择除外,值零(0)可以用作散列返回的异常值吗?
我们目前正在使用Guava的Hashing在String
输入上生成散列,并且异常不能用于报告null
(可能)输入上的异常。此外,返回值必须是原始的64位值,因为它由我无法控制的外部系统使用,因此等效的null也不能用于报告异常。
注意:输入字符串中的预期字符范围是Basic Latin和Latin-1 unicode块。没有NUL字符。
好吧,2 ^ 128输入中的一个将真正散列为0。
你可以创建一个永远不会返回0的略微修改的哈希函数 - 也许如果哈希值真正地归零,它会将输入与任意额外字节连接起来,并保持连接直到哈希值非零。