2016-07-23 11 views
-2

Ich habe gelesen, dass dies für String.hashCode der Quellcode()Was sind Variablen "Offset" & "Hash" in String.hashCode()?

public int hashCode() { 
    int h = hash; 
    if (h == 0) { 
     int off = offset; 
     char val[] = value; 
     int len = count; 

     for (int i = 0; i < len; i++) { 
      h = 31*h + val[off++]; 
     } 
     hash = h; 
    } 
    return h; 
    } 

Meine Frage ist, was sind "Offset" & "hash"? Ich kann sagen, dass "Wert" der tatsächliche String und "Länge" ist seine Länge, aber ich verstehe nicht, was die anderen beiden sind.

+4

Sie könnten einen Blick darauf werfen der * Rest * des 'String'-Quellcodes für den Kontext. –

+1

@AndyTurner Danke, hatte 8 und 7 überprüft –

+1

Lesen Sie die Kommentare im Quellcode neben ['offset'] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/ 6-b14/java/lang/String.java # 116) und ['hash'] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java /lang/String.java#122). –

Antwort

0

Der Offset ist der erste Index des charsets [] des Strings. Die Hash-Variable ist ein Feld zum Zwischenspeichern des hashCodes, um effizienter zu sein (die hashCode() -Methode berechnet nur den Hash, wenn der aktuelle Wert 0 ist; andernfalls gibt sie den zwischengespeicherten Hashwert zurück)