Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

To jest post przetłumaczony przez AI.

제이온

equals() vs hashCode()

  • Język pisania: Koreański
  • Kraj referencyjny: Wszystkie kraje country-flag

Wybierz język

  • Polski
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Nederlands
  • हिन्दी
  • Magyar

Tekst podsumowany przez sztuczną inteligencję durumis

  • `equals()` to metoda porównująca, czy zawartość obiektów jest taka sama, a `hashCode()` to metoda zwracająca unikalną wartość całkowitą obiektu, obie służą do porównywania obiektów.
  • W strukturach danych typu hash `hashCode()` jest używany do określania klucza, dlatego należy ponownie zdefiniować `equals()` i `hashCode()`, aby zapewnić ten sam kod skrótu.
  • Wspólne użycie `equals()` i `hashCode()` umożliwia efektywne zarządzanie identycznymi obiektami w strukturach danych typu hash.

equals()

equals() porównuje zawartość obiektów. Jest to często nazywane porównaniem równości i jeśli nie zastąpisz equals(), wewnętrznie jest równe ==, co oznacza, że ​​jest to porównanie identyczności. Dlatego, jeśli chcesz poprawnie porównać obiekt pod kątem równości, musisz użyć equals().


public boolean equals(Object obj) { 
    return (this == obj); 


hashCode()

hashCode() sprawdza, czy dwa obiekty są tym samym obiektem. Wykonuje to samo porównanie identyczności, co ==, ale metoda hashCode() zwraca jako wartość zwrotną unikalną wartość całkowitą obiektu w czasie wykonywania. Zazwyczaj zwraca adres pamięci obiektu zapisanego w stercie.



Ta metoda ma dołączone słowo kluczowe native, co oznacza, że ​​jest używane w przypadku korzystania z języka zaprogramowanego w innym języku niż Java w Javie.


Czym jest hashowanie?

Hashowanie to proces tworzenia stałej wielkości wartości wyjściowej z zmiennej wielkości wartości wejściowej przy użyciu funkcji skrótu. Wartość uzyskaną przez hashowanie nazywana jest kodem skrótu.


equals() i hashCode()

Ponieważ ten sam obiekt musi mieć ten sam adres pamięci, oczywiste jest, że ten sam obiekt musi mieć ten sam kod skrótu. Dlatego zaleca się zaprogramowanie kodu tak, aby zapewnić ten sam kod skrótu, zastępując nie tylko equals(), ale także hashCode().


Struktura danych skrótu

public class Main {

    public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("제이온", 23));
        people.add(new Person("제이온", 23));
        System.out.println(people.size()); // 2
    }
}

class Person {

    private final String name;

    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }


Dodajmy dwa równe obiekty do struktury danych HashSet. Jeśli wydrukujemy rozmiar tego zbioru, otrzymamy 2. Dlaczego tak?


Dzieje się tak dlatego, że struktury danych wykorzystujące skrótowanie używają hashCode() do określenia klucza. Oznacza to, że przed porównaniem obiektów pod kątem równości porównywane są ich kody skrótu, a następnie określa się, czy obiekt jest równy. Jeśli hashCode() nie zostanie zastąpione, zostanie użyte hashCode() z obiektu, co zwróci adres pamięci, pod którym zapisany jest każdy obiekt. Dlatego w przypadku korzystania ze struktur danych skrótu, oprócz equals(), zaleca się również zastąpienie hashCode().


public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("제이온", 23));
        people.add(new Person("제이온", 23));
        System.out.println(people.size()); // 1
    }
}

class Person {

    private final String name;

    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }


Źródła


Przewidywane pytania i odpowiedzi na rozmowę kwalifikacyjną

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

Dzieje się tak dlatego, że struktury danych wykorzystujące skrótowanie używają hashCode() do określenia klucza. Oznacza to, że przed porównaniem obiektów pod kątem równości porównywane są ich kody skrótu, a następnie określa się, czy obiekt jest równy. Jeśli hashCode() nie zostanie zastąpione, zostanie użyte hashCode() z obiektu, co zwróci adres pamięci, pod którym zapisany jest każdy obiekt. Dlatego w przypadku korzystania ze struktur danych skrótu, oprócz equals(), zaleca się również zastąpienie hashCode().

제이온
제이온
제이온
제이온
[Efektywny Java] Punkt 6. Unikaj niepotrzebnego tworzenia obiektów Przewodnik po sposobach zmniejszenia liczby niepotrzebnych tworzeń obiektów w Javie. W przypadku obiektów niezmiennych, takich jak String, Boolean, lepiej jest używać literałów, a wyrażenia regularne najlepiej buforować w instancji Pattern. Ponadto automa

28 kwietnia 2024

[Java] Synchronized Collection vs Concurrent Collection W tym artykule porównano i przeanalizowano różne metody rozwiązywania problemów synchronizacji w środowiskach wielowątkowych w języku Java, a także ich wady i zalety. Przedstawiono cechy i różnice w wydajności między zsynchronizowanymi kolekcjami, takimi

25 kwietnia 2024

Co to jest Java Collections Framework (JCF)? - Definicja i cechy JCF (JAVA) Java Collections Framework (JCF) to zbiór klas Java, który zapewnia standardowy sposób efektywnego przetwarzania wielu danych. JCF implementuje struktury danych do przechowywania danych i algorytmy jako klasy, co zwiększa możliwość ponownego użycia kodu,

27 kwietnia 2024

[Javascript] Struktura obiektu (V8) Obiekt JavaScript w silniku V8 jest optymalizowany jak struktura w zależności od stanu, przełączając się między szybkim trybem i trybem słownika, który działa jako mapa skrótów. Szybki tryb jest szybki, gdy klucz i wartość są prawie stałe, ale może spowol
곽경직
곽경직
곽경직
곽경직
곽경직

18 marca 2024

Modelowanie danych koncepcyjnych Modelowanie danych koncepcyjnych to proces oddzielania jednostek i przedstawiania relacji między nimi w postaci diagramu ERD. Jednostki to niezależne jednostki informacji, a atrybuty to dane posiadane przez jednostki. Identyfikator jednoznacznie identyfik
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 kwietnia 2024

Jeśli w pliku Excela pojawi się dwa razy opcja usunięcia hasła? Prezentujemy sposób ustawiania i usuwania hasła do odczytu/zapisu w pliku Excela. Hasło do odczytu można ustawić w menu [Plik] &gt; [Informacje] &gt; [Ochrona dokumentu] &gt; [Ustaw hasło], a hasło do zapisu w menu "Zapisz jako" &gt; [Dodatkowe opcje] &gt
길리
길리
길리
길리
길리

17 kwietnia 2024

Modelowanie danych logicznych Modelowanie danych logicznych to proces przekształcania modelu danych koncepcyjnego do schematu relacyjnej bazy danych. Proces ten obejmuje przetwarzanie relacji 1:1, 1:N i N:M oraz zastosowanie normalizacji w celu zapewnienia spójności danych. Normalizac
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 kwietnia 2024

[Bez stopnia, przetrwać jako programista] 14. Podsumowanie często zadawanych pytań na rozmowach kwalifikacyjnych dla początkujących programistów Przewodnik po przygotowaniu do rozmów kwalifikacyjnych dla programistów. Wyjaśnia takie pojęcia często pojawiające się podczas rozmów jak: obszary pamięci głównej, struktury danych, RDBMS i NoSQL, programowanie proceduralne i obiektowe, nadpisywanie i prz
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 kwietnia 2024

Modelowanie danych fizycznych Modelowanie danych fizycznych to proces projektowania tabel relacyjnych baz danych w celu uczynienia ich użytecznymi w praktyce. Osiąga się to poprzez optymalizację wydajności poprzez efektywne wykorzystanie przestrzeni dyskowej, partycjonowanie danych, p
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 kwietnia 2024