equals()
equals() confronta il contenuto di un oggetto con un altro. Comunemente chiamato confronto di uguaglianza, se equals() non viene sovrascritto, internamente è uguale a ==, quindi viene eseguito un confronto di identità. Pertanto, se si desidera confrontare correttamente l'uguaglianza degli oggetti, è necessario utilizzare sempre equals().
hashCode()
hashCode() verifica se due oggetti sono lo stesso oggetto. Ha la stessa funzionalità di confronto di identità come ==, ma il metodo hashCode() restituisce un valore intero univoco dell'oggetto durante l'esecuzione. In genere restituisce l'indirizzo di memoria dell'oggetto memorizzato nell'heap.
Questo metodo ha la parola chiave native, che viene utilizzata quando si utilizza un linguaggio sviluppato in un linguaggio diverso da Java in Java.
Cos'è l'hash?
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 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 riscrivere anche hashCode() oltre a equals() per garantire lo stesso codice hash.
Struttura dati hash
Proviamo a inserire due oggetti uguali nella struttura dati HashSet come mostrato sopra. Se si stampa la dimensione di tale set, verrà visualizzato 2. Perché?
Questo perché la struttura dati che utilizza l'hash utilizza hashCode() per determinare la chiave. In altre parole, prima di confrontare se gli oggetti sono uguali, confronta se i codici hash dei due oggetti sono uguali e quindi determina se i due oggetti sono uguali. In questo caso, se hashCode() non viene sovrascritto, viene utilizzato hashCode() di Object, quindi viene restituito l'indirizzo di memoria in cui è memorizzato ciascun oggetto. Pertanto, è consigliabile sovrascrivere hashCode() oltre a equals() per i casi in cui si utilizza una struttura dati hash.
Fonte
Domande e risposte previste per il colloquio
Perché equals() e hashCode() vengono utilizzati insieme?
Questo perché la struttura dati che utilizza l'hash utilizza hashCode() per determinare la chiave. In altre parole, prima di confrontare se gli oggetti sono uguali, confronta se i codici hash dei due oggetti sono uguali e quindi determina se i due oggetti sono uguali. In questo caso, se hashCode() non viene sovrascritto, viene utilizzato hashCode() di Object, quindi viene restituito l'indirizzo di memoria in cui è memorizzato ciascun oggetto. Pertanto, è consigliabile sovrascrivere hashCode() oltre a equals() per i casi in cui si utilizza una struttura dati hash.
Commenti0