Встречается на собеседованиях • сегодня

В каком случае неэквивалентные объекты вернут одинаковый hashCode

Если два объекта не равны по equals(), но возвращают одинаковый hashCode(), это называется коллизией хеш-кода. Это допустимо, но нежелательно, так как снижает производительность hash-коллекций (например, HashMap).

Пример:

java
String s1 = "FB";
String s2 = "Ea";
System.out.println(s1.equals(s2));  // false
System.out.println(s1.hashCode() == s2.hashCode());  // true (оба = 2236)

Причина:

  • hashCode() для строк вычисляется по формуле s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1].
  • Для "FB": 'F' (70) * 31 + 'B' (66) = 2236.
  • Для "Ea": 'E' (69) * 31 + 'a' (97) = 2236.

Важно:
Коллизии не нарушают контракт hashCode(), но ухудшают работу hash-структур (увеличивают время поиска).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы