我有一个可以包含多个子弹的世界,所有子弹都有一个位置(中心)。基本上是以下
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());
}
但是后来,我意识到我使用的数据结构并不适合这种问题。也就是说,Position
Bullet 的 可以随时更改,但桶中的密钥不会更新。
我已经搜索了一段时间,但我找不到合适的数据结构来做到这一点。所以我想问一下是否有一个好的数据结构/实现可以用来及时解决这个问题O(1)
?