我有一个用三个整数表示的类:serverID,streamID和messageID。
我有一些很小的HashSet
,但是我做了很多类似设置交集的事情,还有一些包含10K +元素的事情。
serverID的值很少,但它们是真正的随机数,具有完整的32位随机性。整个哈希表通常只有一个serverID;有时只有几个serverID。
streamID是一个很小的数字,通常为0,但有时可以为1或2。
对于每个serverID / streamID对,messageID依次增加。
我目前有:
(-messageID << 24) ^ messageID ^ serverID ^ streamID
我想了解,尽管messageID依次增加,但没有其他很多位可以混用,但我具有良好的哈希函数。
是什么使一个好的
hashCode
更好地混合这三个数字? 最佳答案
我个人总是使用在java.lang.String
中实现的策略:
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
因此,在您的情况下,我将使用以下内容:
31 * (31 * messageID + serverID) + streamID