Я создал класс под названием Coordinates
, который просто содержит целые числа x
и y
. Я хочу использовать это как ключ для HashMap
.Создание классов Java, используемых в качестве ключей для hashmap
Однако я заметил, что при создании двух различных экземпляров Coordinates
с теми же x
и y
значений, они используются в качестве различных ключей по хэш-карте. То есть вы можете поместить две записи, даже если обе они имеют одинаковые координаты.
Я перекрываться equals()
:
public boolean equals(Object obj) {
if (!(obj instanceof Coord)) {
return false;
}else if (obj == this) {
return true;
}
Coord other = (Coord)obj;
return (x == other.x && y == other.y);
}
Но HashMap
все еще использует два экземпляра, как если бы они были разными ключами. Что я делаю?
И я знаю, что вместо этого я мог бы использовать целочисленный массив из двух элементов. Но я хочу использовать этот класс.
Вы тоже переопределили «hashcode»? –
@ ZouZou oh нет, я этого не знал. Я вижу, что он возвращает целое число. Что я должен вернуть? Разумеется, это не сумма х и у. – Voldemort
Вам нужно быть последовательным. I.e, если a равно b, то a.hashcode == b.hashcode. См. Также http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java –