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数组