Структура данных для хранения изменяемой пары ключ / значение за время 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) время?

0 ответов

Другие вопросы по тегам