Back to questions
Junior — Middle
81
Какое взаимное отношение должно существовать между методами equals() и hashCode() в Java для корректной работы объектов в коллекциях?
Answer from AI
sobes.tech AI
В Java методы equals() и hashCode() должны быть согласованы для корректной работы объектов в коллекциях, особенно в таких как HashMap и HashSet.
Основные правила:
- Если два объекта равны по методу
equals(), то их методыhashCode()должны возвращать одинаковое значение. - Если
hashCode()у двух объектов разный, то они считаются разными иequals()не вызывается. - Если
hashCode()одинаковый, объекты могут быть как равны, так и не равны поequals(), поэтому при совпадении хешей вызываетсяequals()для проверки.
Нарушение этих правил может привести к неправильному поведению коллекций, например, невозможности найти объект в HashSet или HashMap.
Пример:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass other = (MyClass) obj;
return this.id == other.id;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}