“混合”32位散列的结果以创建64位散列是否具有任何值?

时间:2015-02-12 18:59:26

标签: hash

例如,如果您使用Java进行编程,并且想要为任意对象创建64位哈希函数,那么应用像murmurHash3' finalizer& #39;到Object.hashCode()的结果?

具体来说,是以下哈希函数

long Mix(int i)
{
    long result = i;
    return result ^ (result << 32) ^ (result << 33); // Or some 'better' way of mixing up the bits of i.
}

long Hash(Object o)
{
    return Mix(o.hashCode());
}

比简单地做

更好
long Hash(Object o)
{
    return o.hashCode();
}

(我很清楚第二个没有通过32位哈希给你什么)

散列将用于实现(递归)散列连接,并且将通过执行hash % prime来确定存储区。一个值得关注的问题是,为递归&#39;提供一系列独立的散列函数很难。部分,如果我们只有32位开始。

我认为答案是&#39; no&#39;并且你真的需要从64位哈希开始,该哈希是直接从对象的值计算的。

我想一个侧面的问题是,为了散列连接的目的,你是否真的需要一个64位散列。

0 个答案:

没有答案