Ich bin in einem Test auf diese Frage gestoßen und möchte sie mit Ihnen teilen: Es gibt zwei String-Variablen x und y. Wenn (x.equals(y) == true), existieren die beiden Strings ? Unterschiedliche Hash-Code-Implementierungen, ist das Urteil richtig? Antwort: Falsch, sie haben den gleichen Hash-Code-Wert. Analyse: Diese Frage untersucht hauptsächlich die Zugriffsmethode von String-Objekten. Zuerst müssen wir klären, was der Hash-Codewert der String-Variablen ist. Der Status des im Speicher gespeicherten String-Objekts wird in der Hash-Tabelle gespeichert. Wenn verschiedene Strings generiert werden, wird der Hash-Code des Strings über die Methode hashCode() abgerufen, die den Hash zurückgibt des Strings. Der Code ist vom Typ int. Der Hash-Code eines String-Objekts wird nach der folgenden Formel berechnet: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Hinweis: Verwenden Sie den int-Algorithmus, wobei s[i] das i-te Zeichen der Zeichenfolge ist, n die Länge der Zeichenfolge ist und ^ Potenzierung bedeutet. (Der Hash-Wert einer leeren Zeichenfolge ist 0.) Die Methode hashCode() in Daten vom Typ String erbt die Methode hashCode() in der Klasse Object und ihr Hauptzweck besteht darin, die Leistung der Hash-Tabelle (java.util.Hashtable) zu verbessern . Optimieren Sie die Zugriffseffizienz. Wenn zwei identische Deklarationszeichenfolgen angezeigt werden, wird keine neue Objektinstanz erstellt, sondern der vorhandene Hash-Code zurückgegeben und an die entsprechende Referenz übergeben. Lassen Sie uns die allgemeine Vereinbarung von HashCode einführen, die ungefähr wie folgt lautet: Wenn während der Ausführung einer Java-Anwendung die Methode hashCode zweimal für dasselbe Objekt aufgerufen wird, muss dieselbe Ganzzahl konsistent zurückgegeben werden, vorausgesetzt, die beim Vergleich verwendeten Informationen entsprechen Objekt gleich wurde nicht geändert. Diese Ganzzahl muss nicht von einer Ausführung einer Anwendung zur anderen Ausführung derselben Anwendung gleich bleiben. Wenn zwei Objekte gemäß der Methode equal(Object) gleich sind (Hinweis: Diese Frage ist ein typisches Beispiel), muss beim Aufruf der Methode hashCode() für jedes der beiden Objekte dieselbe Ganzzahl generiert werden. Wenn die beiden Objekte gemäß der Methode equal(java.lang.Object) nicht gleich sind, führt der Aufruf der Methode hashCode() für eines der Objekte nicht unbedingt zu unterschiedlichen ganzzahligen Ergebnissen. In praktischen Anwendungen kann jedoch die Generierung unterschiedlicher ganzzahliger Ergebnisse für verschiedene Objekte die Leistung von Hash-Tabellen verbessern.
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx
-