gpt4 book ai didi

Java - Map.remove 并未实际删除

转载 作者:行者123 更新时间:2023-12-01 19:35:51 25 4
gpt4 key购买 nike

我有一个Vector2d具有私有(private)成员的对象 xy 。它有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com