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

Dit is een door AI vertaalde post.

제이온

equals() vs hashCode()

Selecteer taal

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

Samengevat door durumis AI

  • equals() is a method that compares whether the contents of an object are the same, and hashCode() is a method that returns a unique integer value for an object, both used to compare objects.
  • In hash data structures, hashCode() is used to determine the key, so equals() and hashCode() must be overridden together to ensure the same hash code.
  • Using equals() and hashCode() together allows you to efficiently manage identical objects in hash data structures.

equals()

equals() vergelijkt de inhoud van objecten om te zien of ze hetzelfde zijn. Dit wordt vaak gelijkheidsonderzoek genoemd, en als equals() niet wordt overschreven, wordt intern == gebruikt, wat resulteert in identiteitsvergelijking. Daarom moet je altijd equals() gebruiken als je objecten correct wilt vergelijken op gelijkheid.


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


hashCode()

hashCode() controleert of twee objecten hetzelfde object zijn. Het heeft dezelfde identiteitsvergelijkingsfunctie als ==, maar de hashCode() -methode retourneert een unieke integerwaarde voor het object tijdens runtime. Over het algemeen retourneert het het geheugenadres van het object dat in de Heap is opgeslagen.



De methode heeft het native trefwoord, wat wordt gebruikt wanneer code die is geschreven in een andere taal dan Java, wordt gebruikt in Java.


Wat is hashing?

Hashing is het proces van het genereren van een vaste grootte uitvoerwaarde van een invoerwaarde van variabele grootte met behulp van een hashfunctie. De waarde die wordt verkregen door hashing wordt de hashcode genoemd.


equals() en hashCode()

Het is vanzelfsprekend dat identieke objecten hetzelfde geheugenadres moeten hebben, dus identieke objecten moeten dezelfde hashcode hebben. Daarom is het raadzaam om hashCode() samen met equals() te overschrijven om ervoor te zorgen dat dezelfde hashcode wordt gegarandeerd.


Hash datastructuur

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


Laten we twee identieke objecten in een HashSet-datastructuur plaatsen zoals hierboven. Als we de grootte van de Set uitprinten, krijgen we 2. Waarom is dat zo?


Dit komt omdat datastructuren die hashing gebruiken hashCode() gebruiken om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten identiek zijn, wordt gecontroleerd of de hashcodes van de twee objecten hetzelfde zijn, en daarna wordt bepaald of de twee objecten identiek zijn. Als hashCode() niet is overschreven, wordt de hashCode() van Object gebruikt, wat het geheugenadres retourneert waar elk object is opgeslagen. Daarom is het raadzaam om hashCode() te overschrijven naast equals() voor het geval je datastructuren gebruikt die hashing gebruiken.


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


Bron


Verwachte interviewvragen en antwoorden

Waarom worden equals() en hashCode() samen gebruikt?

Datastructuren die hashing gebruiken, gebruiken hashCode() om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten identiek zijn, wordt gecontroleerd of de hashcodes van de twee objecten hetzelfde zijn, en daarna wordt bepaald of de twee objecten identiek zijn. Als hashCode() niet is overschreven, wordt de hashCode() van Object gebruikt, wat het geheugenadres retourneert waar elk object is opgeslagen. Daarom is het raadzaam om hashCode() te overschrijven naast equals() voor het geval je datastructuren gebruikt die hashing gebruiken.

제이온
제이온
제이온
제이온
[Effectieve Java] Item 6. Vermijd onnodige objectcreatie Een gids over het verminderen van onnodige objectcreatie in Java. Voor onveranderlijke objecten zoals String en Boolean is het beter om literals te gebruiken, en voor reguliere expressies is het beter om Pattern-instanties te cachen. Autoboxing kan ook le

28 april 2024

[Java] Gesynchroniseerde verzameling versus gelijktijdige verzameling Gesynchroniseerde verzamelingen in Java (Vector, Hashtable, Collections.synchronizedXXX) zorgen voor gelijktijdigheid in een multi-threaded omgeving, maar kunnen leiden tot prestatieverlies en problemen wanneer meerdere bewerkingen worden gecombineerd. Al

25 april 2024

Wat is het Java Collections Framework (JCF)? - De definitie en kenmerken van JCF (JAVA) Het Java Collections Framework (JCF) is een verzameling Java-klassen die een gestandaardiseerde manier bieden om met grote hoeveelheden gegevens te werken. JCF implementeert gegevensopslagstructuren en algoritmen als klassen om codeherbruik, prestaties en

27 april 2024

[Javascript] Object-structuur (V8) Het JavaScript Object wordt in de V8-engine geoptimaliseerd als een structuur afhankelijk van de toestand en werkt als een Fast-modus en een Dictionary-modus die als een hashmap werkt. De Fast-modus is snel met keys en waarden in een bijna vaste vorm, maa
곽경직
곽경직
곽경직
곽경직
곽경직

18 maart 2024

[Concurrency] Atomaire bewerking: Memory Fence en Memory Ordering Deze blogpost bespreekt hoe geheugensorde te overwegen in atomaire bewerkingen en het belang van de Ordering-opties. We bespreken verschillende Ordering-opties zoals Relaxed, Acquire, Release, AcqRel, SecCst, inclusief een beschrijving van de voor- en nad
곽경직
곽경직
곽경직
곽경직
곽경직

12 april 2024

Conceptueel gegevensmodellering Conceptueel gegevensmodellering is het proces van het scheiden van entiteiten en het uitdrukken van relaties tussen entiteiten in een ERD. Entiteiten zijn onafhankelijke informatie-eenheden, en attributen zijn de gegevens die een entiteit bezit. Identific
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 april 2024

[Niet-major, overleven als ontwikkelaar] 14. Samenvatting van veelgestelde technische interviewvragen voor beginnende ontwikkelaars Deze gids is bedoeld om beginnende ontwikkelaars te helpen met de voorbereiding op technische interviews. Het behandelt concepten die vaak ter sprake komen tijdens interviews, zoals het hoofdgeheugengebied, gegevensstructuren, RDBMS en NoSQL, procedurele
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 april 2024

Hoe Rust concurrency-fouten voorkomt Rust is een krachtige taal die de uitdagingen van concurrency-programmeren aanpakt. Door het type-systeem en eigendomsmodel is het veilig om gegevens tussen threads te verzenden en te delen. Met behulp van interne veranderlijkheidspatronen zoals Mutex, Ch
곽경직
곽경직
곽경직
곽경직
곽경직

28 maart 2024

Wat is een JWT (JSON Web Token)? Een JSON Web Token (JWT) is een open standaard voor het veilig verzenden van informatie, die de integriteit en veiligheid van informatie garandeert via ondertekende tokens. De header bevat het token-type en het handtekeningalgoritme, terwijl de payload de
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

4 maart 2024