作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个Vector2d
具有私有(private)成员的对象 x
和y
。它有 equals
功能:
@Override
public boolean equals(Object o) {
if (!(o instanceof Vector2d))
return false;
Vector2d other = (Vector2d) o;
return this.x == other.getX() && this.y == other.getY();
}
我有一个Map<Vector2d, Tile>
我想删除任何具有特定位置的条目。这是我想要执行此操作的方法:
public void placeTile(Tile tile, double tileX, double tileY) {
Vector2d pos = new Vector2d(tileX, tileY);
// overwrite
this.tiles.remove(pos);
for (Vector2d v : new HashSet<>(this.tiles.keySet())) {
if (pos.equals(v))
this.tiles.remove(v);
}
this.tiles.put(new Vector2d(tileX, tileY), tile);
}
现在奇怪的是 this.tiles.remove(pos)
不起作用 - 它实际上并没有删除 Tile
与那个位置。然而,循环有效。有什么想法可能导致这种行为吗?就像 HashMap
没有使用已实现的equals
。谢谢
最佳答案
您需要重写 hashCode()
以及 equals()
,因为 HashMap 使用哈希码索引键。
@Override
public int hashCode() {
return Objects.hash(x, y);
}
关于Java - Map.remove 并未实际删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617851/
我是一名优秀的程序员,十分优秀!