Sobes.tech
Middle

Prečo hashCode() rôznych objektov môže vracať rovnaké hodnoty?

sobes.tech AI

Odpoveď od AI

Pretože rozsah možných hodnôt hash kódu (int) je oveľa menší ako rozsah možných hodnôt obsahu objektov. V skutočnosti je vlastnosťou akejkoľvek hashovacej funkcie, že komprimuje vstupné dáta do pevného alebo menšieho rozsahu hodnôt. Kolízie hash kódov (keď rôzne objekty majú rovnaký hash kód) sú nevyhnutné.

Pre správnu funkciu kolekcií založených na hashovaní (napríklad HashMap, HashSet) je potrebné dodržiavať nasledujúce pravidlá:

  1. Ak Objects.equals(a, b), tak a.hashCode() == b.hashCode().
  2. Ak !Objects.equals(a, b), tak a.hashCode() môže byť rovnaký alebo odlišný od b.hashCode().

Kolekcie používajú hashCode() na rýchle určenie potenciálneho "vedra" na umiestnenie alebo vyhľadanie prvku, a potom používajú equals() na presnú kontrolu v tomto vedre.