我有一个可以包含多个子弹的世界,所有子弹都有一个位置(中心)。基本上是以下
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)
时间内是否有一个好的数据结构/实现可用于解决这个问题?