Sobes.tech
Middle

Zašto hashCode() različitih objekata može vraćati iste vrednosti?

sobes.tech АИ

Одговор од АИ

Зато што је опсег могућих вредности хеш-кода (int) много мањи од опсега могућих вредности садржаја објеката. У ствари, ова својство било које хеш-функције је компресија улазних података у фиксни или мањи опсег вредности. Колизије хеш-кодова (када различити објекти имају исти хеш-код) су неизбежне.

За правилан рад колекција заснованих на хеширању (нпр. HashMap, HashSet) потребно је следеће правило:

  1. Ако Objects.equals(a, b), онда a.hashCode() == b.hashCode().
  2. Ако !Objects.equals(a, b), онда a.hashCode() може бити једнак или различит од b.hashCode().

Колекције користе hashCode() за брзо одређивање потенцијалног "кутије" за постављање или претрагу елемента, а затим користе equals() за прецизну проверу унутар тог кутије.