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

Dies ist ein von KI übersetzter Beitrag.

제이온

equals() vs hashCode()

  • Schreibsprache: Koreanisch
  • Referenzland: Alle Länder country-flag

Sprache auswählen

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

Von durumis AI zusammengefasster Text

  • equals() ist eine Methode, die vergleicht, ob der Inhalt von Objekten gleich ist, und hashCode() ist eine Methode, die einen eindeutigen Integer-Wert für ein Objekt zurückgibt. Beide werden zum Vergleichen von Objekten verwendet.
  • In Hash-Datenstrukturen wird hashCode() verwendet, um Schlüssel zu bestimmen. Daher müssen equals() und hashCode() zusammen überschrieben werden, um den gleichen Hashcode zu gewährleisten.
  • Die gemeinsame Verwendung von equals() und hashCode() ermöglicht eine effiziente Verwaltung identischer Objekte in Hash-Datenstrukturen.

equals()

equals() vergleicht den Inhalt eines Objekts. Dies wird oft als Vergleich der Gleichheit bezeichnet. Wenn equals() nicht überschrieben wird, ist es intern mit == identisch, d.h. es handelt sich um einen Vergleich der Identität. Daher ist es wichtig, equals() zu verwenden, wenn Sie Objekte korrekt auf Gleichheit vergleichen möchten.


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


hashCode()

hashCode() prüft, ob zwei Objekte dasselbe Objekt sind. Es handelt sich um eine Identitätsvergleichsfunktion wie ==, aber die hashCode()-Methode gibt einen eindeutigen Integer-Wert für das Objekt zur Laufzeit zurück. Im Allgemeinen wird die Speicheradresse des Objekts zurückgegeben, das im Heap gespeichert ist.



Die Methode hat das Schlüsselwort native, was bedeutet, dass sie verwendet wird, wenn eine in einer anderen Sprache als Java entwickelte Sprache in Java verwendet wird.


Was ist Hashing?

Hashing ist der Prozess, bei dem ein Hash-Algorithmus verwendet wird, um aus einem Eingabewert variabler Größe einen Ausgabewert fester Größe zu generieren. Der so erzeugte Wert wird Hash-Code genannt.


equals() und hashCode()

Da identische Objekte dieselbe Speicheradresse haben müssen, ist es selbstverständlich, dass identische Objekte denselben Hash-Code haben müssen. Daher ist es ratsam, den Code so zu schreiben, dass sowohl equals() als auch hashCode() überschrieben werden, um sicherzustellen, dass der gleiche Hash-Code generiert wird.


Hash-Datenstrukturen

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


Fügen wir eine Datenstruktur vom Typ HashSet mit zwei identischen Objekten hinzu. Wenn die Größe dieses Sets ausgegeben wird, ist das Ergebnis 2. Warum?


Der Grund dafür ist, dass bei der Verwendung einer Datenstruktur mit Hashing die hashCode()-Methode zur Bestimmung des Schlüssels verwendet wird. Das bedeutet, dass vor dem Vergleich der Identität zweier Objekte zunächst überprüft wird, ob die Hash-Codes der beiden Objekte übereinstimmen, und danach wird festgestellt, ob die beiden Objekte identisch sind. Wenn hashCode() nicht überschrieben wird, wird die hashCode()-Methode von Object verwendet, wodurch die Speicheradresse zurückgegeben wird, an der jedes Objekt gespeichert ist. Daher ist es empfehlenswert, hashCode() zusätzlich zu equals() zu überschreiben, wenn eine Hash-Datenstruktur verwendet wird.


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


Quelle


Erwartete Interviewfragen und Antworten

Warum werden equals() und hashCode() zusammen verwendet?

Der Grund dafür ist, dass bei der Verwendung einer Datenstruktur mit Hashing die hashCode()-Methode zur Bestimmung des Schlüssels verwendet wird. Das bedeutet, dass vor dem Vergleich der Identität zweier Objekte zunächst überprüft wird, ob die Hash-Codes der beiden Objekte übereinstimmen, und danach wird festgestellt, ob die beiden Objekte identisch sind. Wenn hashCode() nicht überschrieben wird, wird die hashCode()-Methode von Object verwendet, wodurch die Speicheradresse zurückgegeben wird, an der jedes Objekt gespeichert ist. Daher ist es empfehlenswert, hashCode() zusätzlich zu equals() zu überschreiben, wenn eine Hash-Datenstruktur verwendet wird.

제이온
제이온
제이온
제이온
[Effektives Java] Artikel 6. Vermeiden Sie unnötige Objekterstellung Dieser Leitfaden behandelt die Vermeidung unnötiger Objekterstellung in Java. Für unveränderliche Objekte wie String und Boolean ist es empfehlenswert, Literale zu verwenden, und für reguläre Ausdrücke sollten Sie Pattern-Instanzen cachen. Auto-Boxing kan

28. April 2024

[Java] Synchronized Collection vs Concurrent Collection Dieser Beitrag analysiert und vergleicht die verschiedenen Methoden und Vor- und Nachteile zur Lösung von Synchronisierungsproblemen bei der Verwendung von Sammlungen in einer Multithread-Umgebung in Java. Es werden die Eigenschaften und Leistungsuntersch

25. April 2024

Was ist das Java Collections Framework (JCF)? - Definition und Eigenschaften von JCF (JAVA) Das Java Collections Framework (JCF) ist eine Sammlung von Java-Klassen, die einen standardisierten Weg zur effizienten Verarbeitung von Datensätzen bieten. JCF implementiert Datenstrukturen und Algorithmen als Klassen, um die Code-Wiederverwendbarkeit, d

27. April 2024

[Javascript] Objektstruktur (V8) Das JavaScript-Objekt wird in der V8-Engine je nach Zustand als strukturierte, optimierte Fast-Mode oder als Hashmap-basierter Dictionary-Mode dargestellt. Der Fast-Mode ist schnell, wenn Schlüssel und Werte fast fixiert sind, aber bei der Hinzufügung neu
곽경직
곽경직
곽경직
곽경직
곽경직

18. März 2024

Konzeptionelles Datenmodellieren Konzeptionelles Datenmodellieren ist der Prozess, Entitäten zu trennen und die Beziehungen zwischen Entitäten in einem ERD darzustellen. Entitäten sind unabhängige Informationseinheiten, und Attribute sind die Daten, die eine Entität besitzt. Ein Bezeichn
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8. April 2024

[Nicht-Hauptfach, Überleben als Entwickler] 14. Zusammenfassung der häufigen technischen Vorstellungsgesprächsinhalte für Einsteiger Dieser Leitfaden ist für die Vorbereitung auf technische Vorstellungsgespräche für Einsteiger. Hauptspeicherbereich, Datenstrukturen, RDBMS und NoSQL, prozedurale und objektorientierte Programmierung, Überladen und Überschreiben, Seitenersatzzustände, Pro
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3. April 2024

[Concurrency] Atomarer Vorgang: Memory Fence und Memory Ordering Dieser Blogbeitrag erklärt, wie bei atomaren Operationen die Reihenfolge im Speicher berücksichtigt wird, und die Bedeutung von Ordering-Optionen. Es werden verschiedene Ordering-Optionen wie Relaxed, Acquire, Release, AcqRel, SecCst erläutert und die Vor
곽경직
곽경직
곽경직
곽경직
곽경직

12. April 2024

Was ist Daten-Labeling? Arten, Vorteile und Nachteile Daten-Labeling ist ein essentieller Prozess, der es Computern ermöglicht, Daten zu verstehen. So wie Sie einem Foto eines Hundes oder einer Katze jeweils das Label "Hund" oder "Katze" geben, versehen Sie Daten mit Tags, um maschinelles Lernen zu ermöglich
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

29. März 2024

Was ist ein JWT (JSON Web Token)? Ein JSON Web Token (JWT) ist ein offener Standard zum sicheren Übertragen von Informationen. Es verwendet signierte Token, um die Integrität und Sicherheit von Informationen zu gewährleisten. Der Header enthält den Token-Typ und den Signaturalgorithmus, d
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

4. März 2024