Структура данных для хранения изменяемой пары ключ / значение за время O(1) в Java
У меня есть Мир, который может содержать несколько Пулей, вся Пуля имеет Позицию (Центр). Что в основном заключается в следующем
class Position{
private double xCoordinate;
private double yCoordinate;
}
Нам нужно реализовать функцию в O(1)
(почти постоянное время), которое извлекает соответствующую пулю в мире, давая позицию.
Я пытался использовать HashMap
хранить key/value
(Положение / Пуля) пары. Тем не менее, после изменения координаты пули, я не могу получить это больше, используя его обновленную позицию, как:
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
Пуля может измениться в любое время, но ключ в корзине, однако, не будет обновлен.
Я искал некоторое время, но не могу найти подходящую структуру данных для этого. Поэтому я хочу спросить, есть ли хорошая структура данных / реализация, которую я могу использовать для решения этой проблемы в O(1)
время?