如何以通用(和高性能)的方式實現散列碼,同時最小化具有2個或更多整數的對象的衝突?只有整數的對象的散列碼
更新:正如很多人所說,你無法消除colist entierly(老實說,沒有考慮它)。所以我的問題應該是如何以適當的方式最小化碰撞,編輯以反映這種情況。
使用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;
}
}
}
爲什麼你需要*消除*碰撞?通常最小化碰撞就足夠了,而且這個代碼在這方面做得非常好。 – 2012-04-05 18:59:02
是的,你是正確的,我更新了我的問題。我不知道我同意它在這樣一個小子集失敗時做得很好(雖然優化升技會失敗) – 2012-04-05 19:02:49