用于在Java

时间:2017-04-03 17:22:43

标签: java data-structures key-value constant-time

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

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

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

我尝试使用HashMap存储key/value (位置/子弹)配对。但是,在更改了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());
}

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

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

0 个答案:

没有答案