Hvorfor en uforanderlig String beregne hash-verdi?

Hvorfor en uforanderlig String beregne hash-verdi?


Java-programmer modell kode komponenter som objekter, med hvert objekt har et ansvarsområde. Objekter gi metoder for å utføre sine oppgaver. Noen metoder i Java er gjennomført av alle mulige objekter, inkludert strykere. Java rammeverk lar utviklere å bruke visse typer datalagring struktur, noen som bruker hasj-kodeverdier å lagre elementer. En hash-kode verdi benytter en kode for å referere til et bestemt objekt, slik at samlingen klassen for å implementere effektive metoder for lagring av flere objekter i programmet. Java-kode kan beregne hash-kodeverdier for alle objekter, inkludert strenger, som er uforanderlig.

string innhold

Strengvariabler i Java-programmer er objekter av String klassen, lagring sekvenser av tekst. Dette kan være forvirrende, fordi programmer skape strengvariabler ved hjelp av den samme type struktur som brukes for primitive typen variabler som nummer. Følgende eksempelkode demonstrerer skape en strengvariabel:
String name = "John";

Programmet kan utføre metoder for String klassen på denne variabelen, noen som involverer endrer tekstinnholdet. Fremgangsmåter som endrer innholdet av en streng tilbake normalt en ny streng, i stedet for å endre den eksisterende streng. Dette er fordi strengene er uforanderlig, noe som betyr at når en streng variabel er opprettet, dets innhold kan ikke endres. Programmer som innholdet av en streng ser ut til å bli forandret faktisk lage nye strenger å erstatte eksisterende.

hashCode Funksjon

Alle objekter i Java gi "hashCode" -funksjonen. Dette er fordi alle Java-klasser arver fra superklassen Object, som gir den "hashCode" metoden. Følgende eksempelkode demonstrerer kalle metoden på String variabel:
name.hashCode ();

Ringe denne metoden fører til Java for å generere en hash-kodeverdien for strengvariabelen spesifisert. Opprette en hash-kodeverdien for en streng objekt involverer den samme prosessen som du ville bruke for gjenstand.

Resultat

Den "hashCode" metoden resulterer i et heltall som representerer det aktuelle objektet. Dette tallet kan Java klasser for å optimalisere på effektivitet når du lagrer dataverdier, spesielt i forbindelse med HashMap klassen eller andre relaterte samlinger klasser. I de fleste tilfeller vil en Java programmerer ikke trenger å bekymre seg om detaljene i tallene brukes som hash-koder for elementer som strenger, som samlinger klasser håndtere dette detalj.

Likestilling

Resultatet av å kalle "hashCode" på to elementer som er lik bør være det samme nummeret. For eksempel, bør følgende to strengvariabler generere samme hash-kodeverdien:
String somename = "John";
String otherName = "John";

Hvis to objekter returnere en sann resultat når de anvendes i likeverdige fremgangsmåten, deretter Java anser dem for å være like, i hvilket tilfelle de bør resultere i den samme hash-kode. For eksempel vil følgende kode resultere i en sann verdi:
boolean areEqual = someName.equals (otherName);

Det er vanligvis slik at hvis to strenger ikke er like, vil de generere ulike hash-kodeverdier, men dette er ikke garantert. (Se referanser 1, 2, 3)