Middle
Kodėl skirtingų objektų hashCode() gali grąžinti tas pačias reikšmes?
sobes.tech AI
Atsakymas iš AI
Kad hash kodo (int) galimų reikšmių diapazonas yra daug mažesnis nei objektų turinio galimų reikšmių diapazonas. Iš tikrųjų, bet kurios hash funkcijos savybė yra suspausti įvesties duomenis į fiksuotą arba mažesnį reikšmių diapazoną. Hash kodų susidūrimai (kai skirtingi objektai turi tą patį hash kodą) yra neišvengiami.
Norint, kad hash pagrįstos kolekcijos (pvz., HashMap, HashSet) veiktų teisingai, būtina laikytis šių taisyklių:
- Jei Objects.equals(a, b), tada a.hashCode() == b.hashCode().
- Jei !Objects.equals(a, b), tada a.hashCode() gali būti lygus arba skirtingas nuo b.hashCode().
Kolekcijos naudoja hashCode() greitam potencialaus "kibiro" nustatymui, kurioje vietoje galima įdėti arba ieškoti elementą, ir tada naudoja equals() tiksliai patikrinti šį kibirą.