2014-01-25 31 views
0

我需要一個散列函數來覆蓋對象類的hashCode()方法。如何實現網格上的一個點的散列函數

我有一個Point類,它表示座標網格上的一個點。實例變量是double x,y;

我也有方法

public int getX(){ 
return Math.round(x); 
} 

public int getY(){ 
    Math.round(y); 
} 

我怎樣才能創建一個哈希函數將返回一個整數? 會簡單地把

return Math.round(getX()/getY()); 

工作?

+1

散列函數的目的是介於0和2^32均勻地分佈值 - 1.貴函數做到這一點? –

+0

那你首先如何定義平等?如果你在吸氣者中四捨五入,爲什麼你會有'雙'變量?他們真的打算不僅是整數,有用嗎? –

+0

如果你這樣做,會出現很多散列衝突......例如,6/3 = 2和4/2 = 2; – 1110101001

回答

1

您的IDE很可能有一個實用程序來生成哈希碼並等於您,查看源代碼或插入代碼菜單。

您只需要做的就是return getX()+31*getY();

查看更詳細的討論這個問題和答案對的散列碼的理論:

Best implementation for hashCode method