Den*_*nis 2 java contains hashmap
我有一个有趣的情况,我存储了Coordinate一个HashMap<Coordinate, GUIGameField>.
现在,关于它的奇怪之处在于,我有一段代码,应该保护,不应该使用两次坐标.但是,如果我调试此代码:
if (mapForLevel.containsKey(coord)) {
throw new IllegalStateException("This coordinate is already used!");
} else {
...do stuff...
}
Run Code Online (Sandbox Code Playgroud)
... containsKey总是返回false,虽然我将一个哈希码为9731的坐标存储到地图中,当前的坐标也有哈希码9731.
之后,mapForLevel.entrySet()看起来像:
(java.util.HashMap$EntrySet) [(270,90)=gui.GUIGameField@29e357, (270,90)=gui.GUIGameField@ca470]
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么?我没有想法了.谢谢你的帮助!
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您应该覆盖equals,以hashCode使其正常工作.
编辑:我错误地说你应该使用hashCode你equals- 这是不正确的.虽然hashCode必须为两个相等的对象返回相同的结果,但它仍然可以为不同的对象返回相同的结果.
| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |