Новое Распределяем каналы MAX по категориям и территориям. Читать новость

💡 Java: переопределяешь equals() - переопредели и hashCode()

💡 Java: переопределяешь equals() - переопредели и hashCode()
Два объекта с одинаковым email могут быть равны по equals(), но HashSet.contains() при этом вернёт false.
Причина: HashSet и HashMap сначала используют хеш, чтобы определить, где искать объект, а затем проверяют равенство. Если хеши различаются, до equals() дело может не дойти.
Правило: равные объекты обязаны иметь одинаковый hashCode(). При этом одинаковый хеш не гарантирует равенство - коллизии допустимы.
В примере на картинке равенство определяется по email, поэтому хеш тоже вычисляется по нему.
И ещё: не меняйте поля, участвующие в equals() и hashCode(), пока объект хранится в HashSet или используется как ключ HashMap - поиск может перестать его находить.
#Java #OOP
Просмотры: 251
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти