我使用guava lib中的java murmur3来获取表示哈希的长值。有没有可能只获得积极的长数? Right ow guava返回+/-结果,这对我不利..
由于caclculation框架的限制,我使用murmur3将字符串id转换为数字表示。我不怕少量的碰撞。但我害怕只是采取abs(murmur3Value)。它应该显着提高碰撞的可能性。我是对的吗?
我有~1 * 10 ^ 8个唯一ID,是否可以绝对他们的hased值,而不是太多的碰撞。
我没有10 ^ 7值的任何碰撞,但是散列是正面的和负面的,我只想使用正值。
答案 0 :(得分:5)
使用Math.abs
错误...为Math.abs(Long.MIN_VALUE) == Long.MIN_VALUE
。考虑到有简单的选择,它也会不必要地放慢速度:
x >>> 1
和
x & Long.MAX_VALUE
无论如何,你失去一位,无论是最重要还是最不重要的一位。我想在Murmur3的情况下它并不重要。
关于碰撞,你选择什么操作真的不重要 - 你有2**63
,即大约9e18
个不同的哈希值。使用1e8
输入,这意味着碰撞是非常罕见的(我懒得查找公式)。