Perché un String Immutabile calcolarne il valore hash?

May 28

Perché un String Immutabile calcolarne il valore hash?


Le applicazioni Java componenti di codice modello come oggetti, con ogni oggetto che ha una superficie di responsabilità. Gli oggetti forniscono metodi per svolgere le loro responsabilità. Alcuni metodi in Java sono implementati da tutti gli oggetti possibili, tra le stringhe. Il framework Java consente agli sviluppatori di utilizzare alcuni tipi di struttura di memorizzazione dei dati, alcuni dei quali utilizzano i valori di hash-code per memorizzare gli oggetti. Un valore hash-codice utilizza un codice per indicare un oggetto specifico, consentendo la classe di raccolta implementare metodi efficienti per memorizzare più oggetti all'interno del programma. codice Java in grado di calcolare i valori hash-code per tutti gli oggetti, tra cui stringhe, che sono immutabili.

stringa di contenuto

Le variabili stringa in programmi Java sono oggetti della classe String, la memorizzazione di sequenze di caratteri di testo. Questo può essere fonte di confusione, perché i programmi creano le variabili stringa utilizzando lo stesso tipo di struttura utilizzata per le variabili di tipo primitivo come i numeri. Il codice di esempio seguente dimostra come creare un variabile stringa:
string name = "John";

Il programma può effettuare i metodi della classe String su questa variabile, alcune delle quali coinvolgono alterare il contenuto del testo. I metodi che alterano il contenuto di una stringa normalmente restituiscono una nuova stringa, piuttosto che alterando la stringa esistente. Questo perché le stringhe sono immutabili, il che significa che una volta che si crea una variabile di tipo stringa, il suo contenuto non può essere modificato. I programmi in cui appare il contenuto di una stringa per essere modificati sono in realtà la creazione di nuove stringhe per sostituire quelli esistenti.

Funzione HashCode

Tutti gli oggetti in Java offrono la funzione "hashCode". Questo perché tutte le classi Java ereditano dalla superclasse Object, che fornisce il metodo "hashCode". Il codice di esempio riportato di seguito illustra la chiamata al metodo sulla variabile String:
name.hashCode ();

Chiamata a questo metodo fa sì che Java per generare un valore hash-code per la variabile stringa specificata. La creazione di un valore hash-codice per un oggetto stringa coinvolge lo stesso processo come si usa per qualsiasi oggetto.

Risultato

Il metodo "hashCode" si traduce in un valore intero che rappresenta l'oggetto in questione. Questo numero consente classi Java per ottimizzare l'efficienza durante la memorizzazione valori dei dati, in particolare in collegamento con la classe HashMap o altre classi di altre raccolte. Nella maggior parte dei casi, un programmatore Java non ha bisogno di preoccuparsi dei dettagli dei numeri usati come hash-codici per oggetti come stringhe, come le classi collezioni gestire questo dettaglio.

Uguaglianza

Il risultato della chiamata al "hashCode" su due elementi che sono uguali dovrebbe essere lo stesso numero. Ad esempio, le seguenti due variabili stringa dovrebbero generare lo stesso valore di hash-code:
String SomeName = "John";
String otherName = "John";

Se due oggetti restituiscono un risultato vero quando viene utilizzato entro il metodo equals, poi Java li considera uguali, nel qual caso essi dovrebbero comportare lo stesso hash-code. Ad esempio, il codice seguente comporterebbe un valore vero:
boolean areEqual = someName.equals (otherName);

È tipicamente il caso che se due stringhe non sono uguali, essi generano differenti valori hash-code, ma questo non è garantita. (Vedi riferimenti 1, 2, 3)