从murmur3番石榴中获得积极的长期

时间:2014-07-24 20:08:01

标签: java hash guava

我使用guava lib中的java murmur3来获取表示哈希的长值。有没有可能只获得积极的长数? Right ow guava返回+/-结果,这对我不利..

由于caclculation框架的限制,我使用murmur3将字符串id转换为数字表示。我不怕少量的碰撞。但我害怕只是采取abs(murmur3Value)。它应该显着提高碰撞的可能性。我是对的吗?

我有~1 * 10 ^ 8个唯一ID,是否可以绝对他们的hased值,而不是太多的碰撞。

我没有10 ^ 7值的任何碰撞,但是散列是正面的和负面的,我只想使用正值。

1 个答案:

答案 0 :(得分:5)

使用Math.abs错误...为Math.abs(Long.MIN_VALUE) == Long.MIN_VALUE。考虑到有简单的选择,它也会不必要地放慢速度:

x >>> 1

x & Long.MAX_VALUE

无论如何,你失去一位,无论是最重要还是最不重要的一位。我想在Murmur3的情况下它并不重要。


关于碰撞,你选择什么操作真的不重要 - 你有2**63,即大约9e18个不同的哈希值。使用1e8输入,这意味着碰撞是非常罕见的(我懒得查找公式)。