我已經創建了一個名爲Coordinates
的類,它只保留一些x
和y
整數。我想用這個作爲HashMap
的關鍵。創建可用作散列映射關鍵字的Java類
不過,我注意到,當你創建的Coordinates
兩個不同的實例具有相同x
和y
值,它們被用作通過散列圖不同的密鑰。也就是說,即使它們都具有相同的座標,也可以放入兩個條目。
我已經重寫equals()
:
public boolean equals(Object obj) {
if (!(obj instanceof Coord)) {
return false;
}else if (obj == this) {
return true;
}
Coord other = (Coord)obj;
return (x == other.x && y == other.y);
}
但HashMap
仍然採用了兩個實例,好像他們是不同的密鑰。我該怎麼辦?
而且我知道我可以用兩個元素的整數數組來代替。但我想用這個班。
你重寫了'hashcode'嗎? –
@鄒鄒哦,不,我不知道。我看到它返回一個整數。我應該返回什麼?當然,這不是x和y的總和。 – Voldemort
你需要保持一致。如果a等於b,則a.hashcode == b.hashcode。另請參見http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java –