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

Ez egy AI által fordított bejegyzés.

제이온

equals() vs hashCode()

  • Írás nyelve: Koreai
  • Referencia ország: Minden ország country-flag

Válasszon nyelvet

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

A durumis AI által összefoglalt szöveg

  • Az equals() az objektumok tartalmának összehasonlítására szolgáló metódus, a hashCode() az objektumok egyedi egész értékét adja vissza, és mindkettő az objektumok összehasonlításához használatos.
  • A hash-adatszerkezetekben a hashCode() a kulcs meghatározásához használatos, ezért az equals() és a hashCode() is felülírható a azonos hash-kód biztosítása érdekében.
  • Az equals() és a hashCode() együtt használva hatékonyan kezelhetjük az azonos objektumokat a hash-adatszerkezetekben.

equals()

Az equals() meghatározza, hogy két objektum tartalma azonos-e. Ezt gyakran egyenlőség-összehasonlításnak nevezik, és ha nem írjuk felül az equals() metódust, akkor a belső működése megegyezik a == operátorral, azaz egyenlőség-összehasonlítást végez. Ezért, ha helyesen szeretnénk összehasonlítani az objektumok tartalmát, akkor feltétlenül az equals() metódust kell használnunk.


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


hashCode()

A hashCode() meghatározza, hogy két objektum azonos-e. Ugyanazt a funkciót látja el, mint a == operátor (egyenlőség-összehasonlítás), de a hashCode() metódus egy futási időbeli egyedi egész számot ad vissza az objektumról. Általában a heapen tárolt objektum memória címét adja vissza.



Ez a metódus egy native kulcsszóval van ellátva, ami azt jelenti, hogy Java-n kívül más nyelven kifejlesztett nyelvet használhatunk Java-ban.


Mi a hash?

A hasholás egy olyan folyamat, amely egy változó hosszúságú bemeneti értéket átalakít egy rögzített hosszúságú kimenetté egy hash függvény segítségével. A hasholás során kapott értéket hash kódnak nevezzük.


equals() és hashCode()

Mivel az azonos objektumoknak azonos memória címmel kell rendelkezniük, egyértelmű, hogy az azonos objektumoknak azonos hash kóddal kell rendelkezniük. Ezért kívánatos, hogy a kódunkban az equals() mellett a hashCode() metódust is felülírjuk, hogy biztosítsuk az azonos hash kódot.


Hash adatstruktúrák

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);
    }


Adjunk hozzá egy azonos objektumot kétszer egy HashSet adatstruktúrához. Ha kiírjuk a Set méretét, akkor 2 lesz az eredmény. Miért?


A hash-t alkalmazó adatstruktúrák a hashCode() metódust használják a kulcs meghatározásához. Azaz, mielőtt összehasonlítanánk az objektumokat, összehasonlítjuk a két objektum hash kódját, és csak ezután határozzuk meg, hogy a két objektum azonos-e. Ha a hashCode() metódus nincs felülírva, akkor az Object hashCode() metódusát használjuk, amely a heapen tárolt objektum memória címét adja vissza. Ezért ajánlatos a hashCode() metódust is felülírni az equals() mellett, ha hash adatstruktúrákat használunk.


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);
    }


Forrás


Várható interjúkérdések és válaszok

Miért használjuk az equals() és a hashCode() metódusokat együtt?

A hash-t alkalmazó adatstruktúrák a hashCode() metódust használják a kulcs meghatározásához. Azaz, mielőtt összehasonlítanánk az objektumokat, összehasonlítjuk a két objektum hash kódját, és csak ezután határozzuk meg, hogy a két objektum azonos-e. Ha a hashCode() metódus nincs felülírva, akkor az Object hashCode() metódusát használjuk, amely a heapen tárolt objektum memória címét adja vissza. Ezért ajánlatos a hashCode() metódust is felülírni az equals() mellett, ha hash adatstruktúrákat használunk.

제이온
제이온
제이온
제이온
[Hatékony Java] 6. pont: Kerülje a felesleges objektum létrehozását Útmutató a Java-ban a felesleges objektum létrehozásának minimalizálásához. A String, Boolean és egyéb immutabilis objektumok esetében célszerű literálokat használni, míg a reguláris kifejezéseknél a Pattern példányokat érdemes gyorsítótárazni. Emellett a

2024. április 28.

[Java] Szinkronizált gyűjtemény vs. egyidejű gyűjtemény A Java szinkronizált gyűjteményei (Vector, Hashtable, Collections.synchronizedXXX) garantálják az egyidejűséget többszálas környezetben, de teljesítménycsökkenést okozhatnak, és problémákat okozhatnak, ha több műveletet egybegyűjtve használnak. Alternatív

2024. április 25.

Mi az a Java Collections Framework (JCF)? - A JCF definíciója és jellemzői (JAVA) A Java Collections Framework (JCF) egy olyan szabványosított módszert kínál a Java osztályok halmaza, amely hatékonyan kezeli a nagy mennyiségű adatot. A JCF adatstruktúrákat és algoritmusokat implementál osztályokban, növelve a kód újrafelhasználhatóságá

2024. április 27.

[Javascript] Az objektum szerkezete (V8) A JavaScript objektumok a V8 motorban a gyors módnak megfelelő szerkezetek szövegéhez optimalizálódnak, vagy szótár módként működnek hash-táblaként, a állapottól függően. A gyors mód gyors, de ha új kulcsot adnak hozzá, vagy elemet törölnek, a szótár módb
곽경직
곽경직
곽경직
곽경직
곽경직

2024. március 18.

[Szinkronitás] Atomi művelet: Memória kerítés és memória sorrendezés Ez a bejegyzés bemutatja, hogyan kell figyelembe venni a memória sorrendet atomi műveletekben, és megmagyarázza a sorrendezési beállítások fontosságát. Bemutatja a Relaxed, Acquire, Release, AcqRel, SecCst és egyéb sorrendezési beállításokat, valamint rés
곽경직
곽경직
곽경직
곽경직
곽경직

2024. április 12.

Koncepcionális adatmodellezés A koncepcionális adatmodellezés az entitások elkülönítésének és az entitások közötti kapcsolatok ERD-ként való ábrázolásának folyamata. Az entitások független információs egységek, az attribútumok pedig az entitások által birtokolt adatok. Az azonosítók e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024. április 8.

Mi a JWT (JSON Web Token)? A JSON Web Token (JWT) egy nyílt szabvány az információk biztonságos átvitelére, amely egy aláírt tokenen keresztül biztosítja az információk integritását és biztonságát. A fejléc tartalmazza a token típusát és az aláírási algoritmust, a hasznos adatok pe
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

2024. március 4.

[Nem informatikai szakember, de fejlesztőként akarok túlélni] 14. Gyakran feltett technikai interjúkérdések összefoglalása kezdő fejlesztők számára Útmutató a kezdő fejlesztők számára a technikai interjúra való felkészüléshez. A fő memóriaterület, adatstruktúrák, RDBMS és NoSQL, eljárási és objektumorientált, átírás és túlterhelés, oldalcserélő algoritmusok, folyamatok és szálak, OSI 7-réteg, TCP és
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 3.

Kanban-tábla projekt 2. logikai adatmodellezés A konceptuális adatmodellezés ERD-jén alapuló logikai adatmodellezés lépésenkénti magyarázatával foglalkozik, bemutatva a normalizálás során felmerülő nehézségeket és azok megoldásait. Különösen részletesen foglalkozik a Ticket tábla author_id és responsi
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024. április 9.