Ответ
В HashMap объекты сравниваются по их хеш-коду (hashCode()) и через метод equals(). Сначала проверяется хеш-код ключа — если он совпадает, затем вызывается equals() для точного сравнения.
Пример:
class Key {
String id;
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Key key = (Key) obj;
return id.equals(key.id);
}
}
Важно: Если hashCode() для двух объектов одинаковый, но equals() возвращает false, они попадут в одну корзину (bucket), но будут храниться как разные записи (коллизия). Если equals() возвращает true, их хеш-коды обязаны совпадать.