2013-08-06 18 views
14

Quando abbiamo i metodi equals(), compareTo() perché esiste un metodo hashcode() in Java?Qual è lo scopo del metodo hashcode in java?

E nel caso in cui si utilizza HashTable, è necessario eseguire l'override del metodo hashcode(), Esiste qualche motivo speciale eccetto l'accesso rapido alle chiavi casuali? Se sostituiamo il metodo hashcode() quale sarebbe l'implementazione probabile?

In che modo Java garantisce l'unicità degli oggetti in memoria?


Hashcodes are typically used to enhance the performance of large collections of data.

In hashing calcoliamo hash code. è un compito aggiuntivo. Quando eseguiamo operazioni aggiuntive per ogni oggetto che viene aggiunto a una raccolta. Come si migliora la performance?

+0

perché esiste una tecnica di hashing? Per implementare questi metodi per impostazione predefinita. puoi scavalcarli se vuoi. –

+1

http://en.wikipedia.org/wiki/Java_hashCode() –

+1

http://www.thejavageek.com/2013/06/27/what-are-hashcodes/ –

risposta

12

È sempre necessario eseguire l'override equals e hashCode in tandem, per soddisfare i loro contratti interdipendenti. Una classe che li implementa in modo contraddittorio è semplicemente infranta e inaccettabile nonostante gli standard minimi di ingegneria del software.

Per quanto riguarda , perché si dovrebbe mai utilizzare la struttura dati di hashtable: perché è l'opzione più veloce disponibile per l'archiviazione di valori-chiave ad accesso casuale.

+0

Quale codice scriviamo nel metodo hashcode()? – MaheshVarma

+2

è l'opzione più veloce solo se i codici hash degli oggetti sono sensibili. L'hashcode restituisce 0 per tutti gli oggetti che soddisfano il contratto, ma renderebbe le raccolte basate su hash prestazioni orribili. Basta ignorare hashcode con qualcosa che obbedisce ciecamente al contratto non aiuterà. – eis

+1

@MaheshVarma Esiste un idioma standard per implementare un buon 'hashCode', ed è ampiamente disponibile sul web. È anche una caratteristica dei più moderni IDE per generare l'intero metodo 'equals' e' hashCode' per te. –

-4
why there is a hashcode() method in Java? 

Fondamentalmente ogni volta che inseriamo in una struttura dati univoca, la struttura dati si assicura che non sia inserito alcun oggetto duplicato. Come si fa ??
Questo viene fatto dal contratto che gli oggetti stanno implementando, hashcode() che l'ID univoco come SSN di una persona. Ma se vuoi recuperare un oggetto particolare, indovina quale dovrebbe essere chiamato dopo aver abbinato SSN, sì hai indovinato giusto è equals().

+0

Abbiamo i metodi compareTo() ed equals() per quello. – MaheshVarma

+1

Questo è uguale a() per, ma non hashCode(). È perfettamente valido avere diversi oggetti con lo stesso codice hash. – PeterMmm

+0

Ascoltare, in una struttura dati univoca, viene associato il primo hashcode, quindi viene chiamato uguale. Se hashcode stessa e la struttura dati non consentono le stesse voci, l'oggetto verrà scartato e non verrà chiamato uguale. –

2
+0

il link contiene la risposta giusta, ma dovresti metterlo direttamente nella tua risposta. Fondamentalmente abbiamo il metodo hashCode per supportare i contenitori basati su hash. Come in questo caso, "In condizioni ideali, i contenitori basati su hash offrono un inserimento efficiente e un recupero efficiente, supportando l'hashing direttamente nel modello a oggetti facilita lo sviluppo e l'uso di contenitori basati su hash". – eis

1

Utilizzando il metodo compareTo si stabilisce uno "total order" per i propri oggetti. Un ordine totale è una proprietà abbastanza debole: può solo dirti se un oggetto è "minore di" un altro, ma non ti dà la minima idea di "quanto distanti" sono due oggetti.

Ad esempio, se si dispone di un oggetto N in una struttura dati valore-chiave e si desidera trovare il valore per una determinata chiave. Avendo solo un ordine totale hai bisogno di almeno O (log N) confronti per trovare una chiave corrispondente.

Un codice hash è una proprietà più forte perché può dirvi se due oggetti sono in qualche modo simili o completamente diversi. Grazie a ciò una tabella di hash può trovare un valore per una chiave con operazioni O (1).

Problemi correlati