我有一个有趣的情况,我将 a 存储Coordinate
到HashMap<Coordinate, GUIGameField>
.
现在,奇怪的是,我有一段代码,它应该保护,不应该使用两次坐标。但是如果我调试这段代码:
if (mapForLevel.containsKey(coord)) {
throw new IllegalStateException("This coordinate is already used!");
} else {
...do stuff...
}
...containsKey
总是返回false
,尽管我将哈希码为 9731 的坐标存储到地图中,并且当前坐标也具有哈希码 9731。
之后,mapForLevel.entrySet()
看起来像:
(java.util.HashMap$EntrySet) [(270,90)=gui.GUIGameField@29e357, (270,90)=gui.GUIGameField@ca470]
我可能做错了什么?我没有主意了。谢谢你的帮助!
public class Coordinate {
int xCoord;
int yCoord;
public Coordinate(int x, int y) {
...store params in attributes...
}
...getters & setters...
@Override
public int hashCode() {
int hash = 1;
hash = hash * 41 + this.xCoord;
hash = hash * 31 + this.yCoord;
return hash;
}
}