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

Bam*_*ylo 1 java hash guava

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

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

我有~1*10 ^ 8个唯一ID,是否可以减去他们的hased值并且不会发生太多碰撞.

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

maa*_*nus 5

使用Math.abs是错误的...作为Math.abs(Long.MIN_VALUE) == Long.MIN_VALUE.考虑到有简单的选择,这也是不必要的慢:

x >>> 1
Run Code Online (Sandbox Code Playgroud)

x & Long.MAX_VALUE
Run Code Online (Sandbox Code Playgroud)

在任何情况下,你都失去了一点,无论是最重要的还是最不重要的.我想在Murmur3的情况下没关系.


关于碰撞,你选择什么操作真的应该没关系 - 你将拥有2**63,即关于9e18不同的哈希.对于1e8输入,这意味着碰撞是非常罕见的(我懒得查找公式).