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

Questo è un post tradotto da IA.

제이온

equals() vs hashCode()

Seleziona la lingua

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

Testo riassunto dall'intelligenza artificiale durumis

  • 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, and both are used to compare objects.
  • In hash data structures, hashCode() is used to determine the key, so equals() and hashCode() should 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() confronta se il contenuto degli oggetti è lo stesso. Comunemente chiamato confronto di uguaglianza, se equals() non viene sovrascritto, internamente è uguale a ==, quindi diventa un confronto identico. Pertanto, se vuoi confrontare correttamente gli oggetti per l'uguaglianza, devi assolutamente usare equals().


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


hashCode()

hashCode() controlla se due oggetti sono lo stesso oggetto. Ha la stessa funzione di confronto identico come ==, ma il metodo hashCode() restituisce un valore intero univoco per l'oggetto durante l'esecuzione. Generalmente restituisce l'indirizzo di memoria dell'oggetto memorizzato nell'heap.



Il metodo ha la parola chiave nativa attaccata, che viene utilizzata quando si utilizza un linguaggio sviluppato in un linguaggio diverso da Java in Java.


Che cos'è l'hashing?

L'hashing è il processo di utilizzo di una funzione hash per generare un valore di output di dimensione fissa da un valore di input di dimensione variabile. Il valore ottenuto tramite l'hashing è chiamato codice hash.


equals() e hashCode()

Poiché lo stesso oggetto deve avere lo stesso indirizzo di memoria, è ovvio che lo stesso oggetto deve avere lo stesso codice hash. Pertanto, è consigliabile scrivere codice che sovrascriva anche hashCode() insieme a equals() per garantire lo stesso codice hash.


Struttura dati hash

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


Proviamo a inserire 2 oggetti uguali nella struttura dati HashSet come sopra. Se stampiamo la dimensione di questo Set, otterremo 2. Perché?


Questo perché la struttura dati che utilizza l'hashing utilizza hashCode() per determinare la chiave. In altre parole, prima di confrontare se gli oggetti sono identici, confronta se i codici hash dei due oggetti sono gli stessi e quindi determina se i due oggetti sono uguali. In questo caso, se hashCode() non è sovrascritto, verrà utilizzato hashCode() di Object, quindi verrà restituito l'indirizzo di memoria in cui è memorizzato ogni oggetto. Pertanto, è consigliabile sovrascrivere anche hashCode() oltre a equals() per i casi in cui si utilizza la struttura dati hash.


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


Fonte


Domande e risposte previste per l'intervista

Perché equals() e hashCode() vengono utilizzati insieme?

Questo perché la struttura dati che utilizza l'hashing utilizza hashCode() per determinare la chiave. In altre parole, prima di confrontare se gli oggetti sono identici, confronta se i codici hash dei due oggetti sono gli stessi e quindi determina se i due oggetti sono uguali. In questo caso, se hashCode() non è sovrascritto, verrà utilizzato hashCode() di Object, quindi verrà restituito l'indirizzo di memoria in cui è memorizzato ogni oggetto. Pertanto, è consigliabile sovrascrivere anche hashCode() oltre a equals() per i casi in cui si utilizza la struttura dati hash.

제이온
제이온
제이온
제이온
[Effictive Java] Item 6. Evitare la creazione di oggetti non necessari Questa è una guida su come ridurre la creazione di oggetti non necessari in Java. Per gli oggetti immutabili come String e Boolean, è meglio usare i letterali e per le espressioni regolari è meglio mettere in cache l'istanza di Pattern. Inoltre, l'autobox

28 aprile 2024

[Java] Synchronized Collection vs Concurrent Collection In Java, we compared and analyzed various methods and advantages and disadvantages for solving synchronization problems when using collections in a multithreaded environment. We introduce the characteristics and performance differences of synchronized col

25 aprile 2024

Che cos'è Java Collections Framework (JCF)? - Definizione e caratteristiche di JCF (JAVA) Java Collections Framework (JCF) è un insieme di classi Java che fornisce un modo standardizzato per elaborare in modo efficiente grandi quantità di dati. JCF implementa strutture di dati di archiviazione e algoritmi come classi per migliorare la riutiliz

27 aprile 2024

[Javascript] Struttura dell'oggetto (V8) L'oggetto JavaScript in V8 Engine viene ottimizzato come una struttura in base allo stato e convertito in modalità Fast e modalità Dictionary che funziona come una hashmap. La modalità Fast è rapida con chiave e valore in un formato quasi fisso, ma se vie
곽경직
곽경직
곽경직
곽경직
곽경직

18 marzo 2024

Modellazione concettuale dei dati La modellazione concettuale dei dati è il processo di separazione delle entità e di rappresentazione delle relazioni tra le entità tramite un ERD. Un'entità è un'unità di informazioni indipendente, mentre gli attributi sono i dati detenuti dall'entità. Gl
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 aprile 2024

[Non specialisti, sopravvivere come sviluppatori] 14. Riepilogo dei contenuti del colloquio tecnico per sviluppatori junior Questa è una guida alla preparazione ai colloqui tecnici per sviluppatori junior. Copre argomenti come la memoria principale, le strutture dati, RDBMS e NoSQL, programmazione procedurale e orientata agli oggetti, override e overload, algoritmi di sostituz
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 aprile 2024

[Concurrency] Operazione Atomica: Memory Fence e Memory Ordering Questo post del blog spiega come considerare l'ordine di memoria nelle operazioni atomiche e l'importanza delle opzioni di ordinamento. Vengono spiegate le diverse opzioni di ordinamento come Relaxed, Acquire, Release, AcqRel, SecCst, insieme ai vantaggi
곽경직
곽경직
곽경직
곽경직
곽경직

12 aprile 2024

Cos'è JWT (JSON Web Token)? JSON Web Token (JWT) è un metodo per la trasmissione sicura di informazioni, composto da un'intestazione, un payload e una firma. Il server utilizza una chiave privata per generare la firma, garantendo l'integrità e la sicurezza del token. JWT è autonomo
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

4 marzo 2024

[python] Fondamenti di Python 1: Esplorazione dei moduli Python I moduli Python sono file che contengono variabili, funzioni, classi e altro, e sono utili quando si utilizzano moduli creati da altri o quando si desidera raggruppare variabili, funzioni o altro utilizzate comunemente. È possibile importare e utilizzare
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

27 marzo 2024