我定義我類如:哈希碼的均勻分佈()
final class Key<T extends Comparable<T>> {
private final T q;
private final T o;
public Key(T q1, T o1) {
q = q1;
o = o1;
}
@Override
public boolean equals(Object obj) {
if(obj != null && obj instanceof Key) {
Key<T> s = (Key<T>)obj;
return q.equals(s.q) && o.equals(s.o);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(q,o);
}
}
我還定義一個數組包含對象密鑰。例如:
Object arr[] = new Object[100];
Key<String> k = new Key<>("a","b");
int h = k.hashcode();
...
arr[h+i % h] = k; //i from 1 to 10 for example
的問題是,散列碼()可以返回一個負值所以
arr[h+i % h] = k;
可以返回錯誤出數組索引的。這就是爲什麼,因爲我改變了我的代碼(根據我的搜索,以避免hashCode()方法返回負值):
@Override
public int hashCode() {
return (Objects.hash(q,o)&0x7FFFFFFF);
}
所以,如果我做這樣,做的哈希碼的均勻分佈()來改變或不?我的意思是從兩個不同的對象獲得相同的價值的可能性會增加或不增加?
,你怎麼樣能夠創建對象作爲鍵的鍵。它應該給編譯器錯誤,因爲鍵入的參數數量不正確 –
Roshan
是的,我的錯誤。我也編輯過它。謝謝 – nd07
你可以看看有很好分佈的雜音哈希。並且不能具有價值 –