Ответ
В Java hashCode() используется для определения бакета (корзины) в HashMap. По умолчанию Object.hashCode() возвращает уникальный хеш на основе адреса памяти, но его можно переопределить.
Правила:
- Если
a.equals(b) == true, тоa.hashCode() == b.hashCode(). - Обратное не обязательно верно (коллизии).
Пример:
@Override
public int hashCode() {
return Objects.hash(name, age); // Использует поля для хеша
}
В HashMap хеш модифицируется для равномерного распределения:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
Это снижает коллизии при работе с таблицей.