在我们组织中的一个特定用例中,我选择使用MurmurHash3(128位版本)来确定由多个元素组成的记录与另一个记录相比是否唯一。除了使用散列确定唯一性的智慧之外,还需要选择算法和争论,是否可以将值零(0)用作散列返回的异常值?
我们当前正在使用Guava的哈希在String
输入上生成哈希,并且不能使用异常来报告null
(可能)输入上的异常。另外,返回值必须是 primitive 64位值,因为它是由我无法控制的外部系统消耗的,因此等效于 null 不能用于报告异常情况。
注意:输入字符串中预期的字符范围是在Basic Latin和Latin-1 unicode块中。没有NUL字符。
答案 0 :(得分:0)
好吧,每2 ^ 128个输入中就有1个真正会散列为0。
您可以创建一个经过稍微修改的哈希函数,该函数永远不会返回0,但是-也许,如果哈希真正变为零,它会对输入加上一个任意的额外字节进行哈希处理,并一直进行连接,直到哈希显示为非零为止。