您如何以一般(和高性能)的方式实现哈希码,同时最大限度地减少具有 2 个或更多整数的对象的冲突?
更新:正如许多人所说,你不能完全消除结肠(老实说没有考虑过)。所以我的问题应该是如何以适当的方式最小化碰撞,并进行编辑以反映这一点。
使用 NetBeans 的自动生成失败;例如:
public class HashCodeTest {
@Test
public void testHashCode() {
int loopCount = 0;
HashSet<Integer> hashSet = new HashSet<Integer>();
for (int outer = 0; outer < 18; outer++) {
for (int inner = 0; inner < 2; inner++) {
loopCount++;
hashSet.add(new SimpleClass(inner, outer).hashCode());
}
}
org.junit.Assert.assertEquals(loopCount, hashSet.size());
}
private class SimpleClass {
int int1;
int int2;
public SimpleClass(int int1, int int2) {
this.int1 = int1;
this.int2 = int2;
}
@Override
public int hashCode() {
int hash = 5;
hash = 17 * hash + this.int1;
hash = 17 * hash + this.int2;
return hash;
}
}
}