Java: Как проверить, существует ли ключ в Hashmap - PullRequest
1 голос
/ 12 апреля 2020

Я определил хэш-карту типа:

HashMap<Position, Double> list = new HashMap<>();

Где Position - это класс с двумя атрибутами x и y.

Я хотел бы проверить, есть ли уже позиция в списке или нет, я пробовал это:

public void addToList(Position p, double somme) {
    if (this.list.containsKey(p)) {
        this.list.replace(p, this.list.get(p) + somme);//add the old value somme 
    } else {
        this.list.put(p, somme);
    }
}

Я думаю, что я должен быть более точным c и проверять значения x любой y вместо проверки, если ключ существует, потому что каждый раз, когда проверка не могла обнаружить существующая позиция.

Как проверить, есть ли позиция в списке или нет?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

Реализуйте оба равных И хеш-код в вашем классе позиции, на основе свойств x и y. Hashmap использует последнее, чтобы найти корзину, в которой нужно проверить ключ - одни только равно не сработают.

Обратите внимание, что хэш-код и равно должны быть согласованы в том смысле, что два равных объекта должны иметь одинаковый хеш-код.

Как уже упоминалось в другом ответе, реализовать метод те и onlyKey, основанный на позиции, будет работать как вы ожидаете.

3 голосов
/ 12 апреля 2020

Вам следует переопределить методы equals и hashCode вашего объекта Position, чтобы два элемента с одинаковыми значениями для x и y были равны.

@Override
public boolean equals(Object obj) { 
    if (obj == this) {
        return true;
    }
    if (obj == null || obj.getClass() != this.getClass()) {
        return false;
    }

    Position otherPos = (Position) obj;
    return x == otherPos.x
            && y == otherPos.y;
}

@Override
public int hashCode() {
    return Objects.hash(x, y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...