Hashcode/equals Flashcards

1
Q
A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое методы hashCode() и equals()?

A

Это методы для сравнения объектов, используются для не примитивных типов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Почему важно переопределять hashCode() и equals()?

A

Для корректной работы хэш-коллекций, обеспечения согласованности между сравнением объектов и их хэш-кодами, и избежания логических ошибок в программе.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что нужно делать при переопределении hashCode()?

A

Если вы переопределяете один из этих методов, всегда переопределяйте и другой, чтобы соблюсти контракт между ними.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Каков контракт между методами equals() и hashCode()?

A

Обязательно имплементировать оба. Если равны по equals, то hashCode всегда одинаковый. Не должно меняться в жизни объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Каков второй контракт между equals() и hashCode()?

A

Равны по equals, по hashCode тоже равны. Если равны по hashCode, то не обязательно по equals. Если не равны по hashCode, то по equals тоже не равны.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что произойдет, если hashCode возвращает одно число?

A

Будет работать, но будет плохая работа в хэш коллекциях, время будет не логарифмическое, а линейное.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Каковы основные свойства контракта equals()?

A

Симметричность: x.equals(y) == true, то y.equals(x) == true. Рефлексивность: x.equals(x). Транзитивность: a=b, b=c, a=c.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что произойдет, если не переопределены equals() и hashCode()?

A

Вернет false и скажет, что нет такого id.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Для чего нужно хеширование и какие примеры его использования?

A

Примеры: хешмапы и хешсеты. Если не определены, то будет сложность O(n) вместо O(log N).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какова основная функция хешкода?

A

Разбивает объекты на группы с одинаковым хешкодом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Как изначально определен equals()?

A

Через identity, сравнивает значения по ссылкам.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly