2

我有一个类,它有三个整数来表示它:serverID、streamID 和 messageID。

我有一些HashSet很小但我做了很多东西,比如设置交叉点,还有一些有 10K+ 元素的东西。

serverID 只有少数几个值,但它们是真正的随机数,具有完整的 32 位随机性。通常整个哈希表只有一个 serverID;其他时候只有几个 serverID。

streamID 是一个很小的数字,通常为 0,但有时可能为 1 或 2。

对于每个 serverID/streamID 对,messageID 依次增加。

我目前有:

(-messageID << 24) ^ messageID ^ serverID ^ streamID

我想了解我有一个很好的哈希函数,尽管有一个顺序增加的 messageID 并且没有很多其他的位可以混合。

什么是好的hashCode,我怎样才能最好地混合这三个数字?

4

2 回答 2

1

eclipse 给它自己很好的哈希码生成

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + messageID;
    result = prime * result + serverID;
    result = prime * result + streamID;
    return result;
}
于 2012-08-20T09:05:44.167 回答
1

我个人总是使用以下实施的策略java.lang.String

        for (int i = 0; i < len; i++) {
            h = 31*h + val[off++];
        }

所以,在你的情况下,我会使用以下内容:31 * (31 * messageID + serverID) + streamID

于 2012-08-20T09:06:39.257 回答