Do czego służą metody equals i hashCode w Java?
sobes.tech AI
Odpowiedź od AI
Metody equals i hashCode w Javie służą do poprawnego porównywania obiektów i pracy z kolekcjami opartymi na tablicach haszujących (np. HashMap, HashSet).
-
equals(Object o): Określa, czy bieżący obiekt jest równoważny z innym obiektem. Domyślnie porównuje odwołania do obiektów. Nadpisuje się je, aby porównać stan wewnętrzny obiektów. -
hashCode(): Zwraca wartość całkowitą (kod haszujący) obiektu. Używany przez kolekcje do szybkiego wyszukiwania elementów. Musi być zgodny zequals: jeśli dwa obiekty są równe wedługequals, ich kody haszujące muszą być takie same. Twierdzenie odwrotne nie jest prawdziwe.
Nieprawidłowa lub brak nadpisania tych metod może prowadzić do nieprawidłowego zachowania podczas korzystania z obiektów w kolekcjach, takich jak brak obiektu w Set po dodaniu lub niemożność odnalezienia obiektu w HashMap po kluczu.
Przykład nadpisania:
public class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true; // Porównanie referencji
if (o == null || getClass() != o.getClass()) return false; // Sprawdzenie typu i null
MyObject that = (MyObject) o; // Rzutowanie
if (id != that.id) return false; // Porównanie pól
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
int result = id; // Obliczanie kodu haszującego na podstawie pól
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}