제이온

equals() vs hashCode()

  • Język oryginalny: Koreański
  • Kraj: Wszystkie krajecountry-flag
  • TO

Utworzono: 2024-04-25

Utworzono: 2024-04-25 22:29

equals()

equals() porównuje zawartość obiektów. Często nazywane jest to porównaniem równości, a jeśli nie zostanie zdefiniowana metoda equals(), domyślnie jest ona równoważna z operatorem ==, co oznacza porównanie tożsamości. Dlatego, aby poprawnie porównać obiekty pod kątem równości, należy zawsze używać metody equals().



hashCode()

hashCode() sprawdza, czy dwa obiekty są tym samym obiektem. Działa podobnie jak operator == (porównanie tożsamości), ale metoda hashCode() zwraca unikalną wartość całkowitą reprezentującą obiekt w czasie wykonywania programu. Zazwyczaj zwraca adres pamięci obiektu w stercie (Heap).



Ta metoda ma dołączone słowo kluczowe native, co oznacza, że jest ona zaimplementowana w innym języku niż Java i jest dostępna dla Javy. Jest to typowe dla sytuacji, gdy kod napisany w innym języku (np. C++) jest używany w środowisku Java.


Czym jest hashowanie?

Hashowanie to proces generowania stałej długości wartości wyjściowej z wejścia o zmiennej długości za pomocą funkcji hashującej. Otrzymana wartość nazywana jest kodem hashującym.


equals() i hashCode()

Ponieważ ten sam obiekt musi mieć ten sam adres pamięci, to oczywiste jest, że ten sam obiekt musi mieć ten sam kod hashujący. Dlatego zaleca się przedefiniowanie nie tylko metody equals(), ale również hashCode(), aby zapewnić spójność kodów hashujących dla równoważnych obiektów.


Struktura danych hashująca


Spróbujmy dodać dwa równoważne obiekty do struktury danych HashSet. Po wydrukowaniu rozmiaru tego zbioru otrzymamy 2. Dlaczego tak się dzieje?


Dzieje się tak, ponieważ struktury danych oparte na hashowaniu używają metody hashCode() do określania klucza. Oznacza to, że przed porównaniem równości obiektów, najpierw porównuje się ich kody hashujące, a następnie sprawdza się, czy są one równoważne. Jeśli metoda hashCode() nie jest zdefiniowana, to używana jest domyślna metoda hashCode() z klasy Object, która zwraca adres pamięci każdego obiektu. Dlatego w przypadku korzystania ze struktur danych hashujących, zaleca się przedefiniowanie nie tylko metody equals(), ale również metody hashCode().



Źródła


Przewidywane pytania na rozmowę kwalifikacyjną i odpowiedzi

Dlaczego metody equals() i hashCode() są używane razem?

Struktury danych oparte na hashowaniu używają metody hashCode() do określania klucza. Oznacza to, że przed porównaniem równości obiektów, najpierw porównuje się ich kody hashujące, a następnie sprawdza się, czy są one równoważne. Jeśli metoda hashCode() nie jest zdefiniowana, to używana jest domyślna metoda hashCode() z klasy Object, która zwraca adres pamięci każdego obiektu. Dlatego w przypadku korzystania ze struktur danych hashujących, zaleca się przedefiniowanie nie tylko metody equals(), ale również metody hashCode().

Komentarze0

[Dla osób bez informatycznego wykształcenia, jak przetrwać jako programista] 14. Podsumowanie często zadawanych pytań na rozmowach kwalifikacyjnych dla początkujących programistówPodsumowując, przedstawiamy często zadawane pytania techniczne na rozmowach kwalifikacyjnych dla programistów (obszar pamięci, struktury danych, bazy danych itd.). Mamy nadzieję, że pomoże to w przygotowaniach do rozmowy kwalifikacyjnej.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024