Middle
Dlaczego hashCode() różnych obiektów może zwracać te same wartości?
sobes.tech AI
Odpowiedź od AI
Ponieważ zakres możliwych wartości hasza (int) jest znacznie mniejszy niż zakres możliwych wartości zawartości obiektów. W rzeczywistości, właściwością każdej funkcji hash jest kompresja danych wejściowych do zakresu stałego lub mniejszego. Kolizje hash (gdy różne obiekty mają ten sam hash) są nieuniknione.
Aby kolekcje oparte na haszowaniu (np. HashMap, HashSet) działały poprawnie, muszą spełniać następujące zasady:
- Jeśli Objects.equals(a, b), to a.hashCode() == b.hashCode().
- Jeśli !Objects.equals(a, b), to a.hashCode() może być równe lub różne od b.hashCode().
Kolekcje używają hashCode(), aby szybko określić potencjalny "wiadro" do umieszczenia lub wyszukania elementu, a następnie używają equals() do dokładnej weryfikacji w tym wiadrze.