Java中O(1)时间内存储可变键/值对的数据结构
我有一个可以包含多个项目符号的世界,所有项目符号都有一个位置(中心)。基本上是这样的Java中O(1)时间内存储可变键/值对的数据结构,java,data-structures,key-value,constant-time,Java,Data Structures,Key Value,Constant Time,我有一个可以包含多个项目符号的世界,所有项目符号都有一个位置(中心)。基本上是这样的 class Position{ private double xCoordinate; private double yCoordinate; } 我们需要在O(1)(几乎恒定时间)中实现一个函数,该函数通过给出位置来检索世界上相应的项目符号 我尝试使用HashMap来存储键/值(位置/项目符号)对。但是,在更改子弹的坐标后,我无法再使用他更新的位置检索此信息,如: this.bullets.
class Position{
private double xCoordinate;
private double yCoordinate;
}
我们需要在O(1)
(几乎恒定时间)中实现一个函数,该函数通过给出位置来检索世界上相应的项目符号
我尝试使用HashMap
来存储键/值
(位置/项目符号)对。但是,在更改子弹的坐标后,我无法再使用他更新的位置检索此信息,如:
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());
}
但后来,我意识到我使用的数据结构不适合这种问题。也就是说,子弹的位置可以随时更改,但是桶中的钥匙不会更新
我已经搜索了一段时间,但我找不到合适的数据结构来实现这一点。因此,我想问一下,是否有一个好的数据结构/实现,我可以用来解决O(1)
time中的这个问题?您真的需要按位置查询吗?有很多职位。或者你只是想知道在某个特定区域有什么子弹?另请参见:.@AndyThomas抱歉没有具体说明这个问题,我基本上说的位置是子弹的中心,我需要检查给定的位置是否与该子弹的中心重合|任务是:类世界还应提供一种方法,在给定的位置返回飞船或子弹(如果有的话),即中心与给定位置重合的物体。此方法必须在几乎恒定的时间内返回其结果,并且必须以整体方式计算。世界的尺寸是否足够小,以允许创建子弹移动的三维阵列?只要在位置发生变化时移除并重新插入它即可?虽然使用双精度作为映射键的一部分通常看起来是个糟糕的主意,因为浮点精度。感谢@AndyThomas World是标准的1920*1080,但我不知道为什么我们需要使用3D阵列。您真的需要按位置查询吗?有很多职位。或者你只是想知道在某个特定区域有什么子弹?另请参见:.@AndyThomas抱歉没有具体说明这个问题,我基本上说的位置是子弹的中心,我需要检查给定的位置是否与该子弹的中心重合|任务是:类世界还应提供一种方法,在给定的位置返回飞船或子弹(如果有的话),即中心与给定位置重合的物体。此方法必须在几乎恒定的时间内返回其结果,并且必须以整体方式计算。世界的尺寸是否足够小,以允许创建子弹移动的三维阵列?只要在位置发生变化时移除并重新插入它即可?虽然使用双精度作为映射键的一部分通常看起来是个糟糕的主意,因为浮点精度。@AndyThomas World的标准是1920*1080,但我不知道为什么我们需要使用3D数组