2010-08-23 81 views
0

我有這個簡單的類POD的Java hashCode?

public class Position{ 
    int x; 
    int y; 

    Position(int x,int y){...} 

    public int hashCode(){ 
    Integer ix = this.x; 
    Integer iy = this.y; 

    return 13*iy.hashCode() + 43*ix.hashCode(); 
    } 
} 

hashMap林存儲實例,但隨後傾斜檢索。我擔心它的實現。當x和y不是對象時,有什麼辦法可以實現它嗎?

在此先感謝

+0

什麼是哈希表? – 2010-08-23 03:40:25

+0

那它是什麼?缺少等於? – Thilo 2010-08-23 04:13:24

+0

涉及蹩腳平等的糟糕決定的組合。 – Tom 2010-08-23 04:31:53

回答

2

,你不能取回他們無關,與你的hashCode實現。

爲整數#的hashCode剛剛返回它的值,你可以把它簡化爲

public int hashCode(){ 
     return 13*iy+43*ix; 
} 

你把對象插入到地圖之後,改變Ix和Iy?這是一個很大的禁忌,並且完全破壞了哈希表。您也需要定義Position#equals

2

我有一個猜測:你是否覆蓋了equals方法?在Java中,當你實現一個時,你應該實現另一個。

特別是,如果您使用Position實例作爲密鑰,HashMap會將它們與equals進行比較。否則,兩個鍵可能會意外地具有相同的散列值,但值不同。

HashMap#get

if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 
      return e.value; 
+0

yeap,它在那裏。 – Tom 2010-08-23 03:43:18

+0

我不認爲在這種情況下重寫'equals'方法,因爲Object.equals()對於這種情況是可以的:) 我同意Thilo:將對象放入對象後改變ix和iy是錯誤的地圖 – 2010-08-23 03:43:46

+0

+1:可能就是這樣。 – Thilo 2010-08-23 03:43:47