我有一个有三个整数来表示它的类:serverID,streamID和messageID。
我有一些HashSet
很小但是我做了很多东西,比如设置交叉点,而其他的东西都有10K +元素。
serverID只有少数几个值,但它们是真正的随机数,具有完整的32位随机性。整个哈希表通常只有一个serverID;其他时候只是几个serverID。
streamID是一个小数字,通常为0但有时可能为1或2。
对于每个serverID / streamID对,messageID会逐渐增加。
我目前有:
(-messageID << 24) ^ messageID ^ serverID ^ streamID
我想要理解我有一个很好的哈希函数,尽管有一个顺序增加的messageID而不是很多其他位混合。
什么是好的hashCode
,我怎样才能最好地混合这三个数字呢?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
我个人总是使用java.lang.String
中实施的策略:
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
因此,在您的情况下,我会使用以下内容:31 * (31 * messageID + serverID) + streamID