1

我有一个可以包含多个子弹的世界,所有子弹都有一个位置(中心)。基本上是以下

class Position{
    private double xCoordinate;
    private double yCoordinate;
}

我们需要在O(1)(几乎恒定的时间)内实现一个函数,它通过给出一个位置来检索世界中对应的子弹。

我试图用来HashMap存储key/value (Position/Bullet)对。但是,在更改子弹的坐标后,我无法再使用他更新的位置来检索它,例如:

this.bullets.get(new Position(bullet.getX(), bullet.getY())))

null结果给出

最初,我认为问题是由我实现的 hashCode 和 equals 方法的问题引起的:

@Override
public boolean equals(Object other) {
    if (other == null) return false;
    if (other == this) return true;
    if ((other instanceof Position)) {
        if (((Position) other).getXCoordinate() == this.getXCoordinate() &&
            ((Position) other).getYCoordinate() == this.getYCoordinate()) return true;
        }
    return false;
}

@Override
public int hashCode(){
    return Objects.hash(this.getXCoordinate(),this.getYCoordinate());
}

但是后来,我意识到我使用的数据结构并不适合这种问题。也就是说,PositionBullet 的 可以随时更改,但桶中的密钥不会更新。

我已经搜索了一段时间,但我找不到合适的数据结构来做到这一点。所以我想问一下是否有一个好的数据结构/实现可以用来及时解决这个问题O(1)

4

0 回答 0