Heim > Java > javaLernprogramm > Warum verwendet Javas „hashCode()' für Strings 31 als Multiplikator?

Warum verwendet Javas „hashCode()' für Strings 31 als Multiplikator?

Linda Hamilton
Freigeben: 2024-12-26 13:28:13
Original
896 Leute haben es durchsucht

Why Does Java's `hashCode()` for Strings Use 31 as a Multiplier?

Warum wird 31 als Multiplikator in Javas hashCode()-Methode für Strings verwendet?

Die Java-Dokumentation spezifiziert die Berechnung eines String-Objekts Hash-Code wie folgt:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Nach dem Login kopieren

wobei s[i] das i-te Zeichen der Zeichenfolge ist, n ist die Länge der Zeichenfolge und ^ steht für Potenzierung. Diese Formel beinhaltet einen festen Multiplikator von 31.

Begründung für die Verwendung von 31 als Multiplikator

Laut Joshua Blochs angesehenem Werk „Effective Java“ ist die Wahl von 31 da der Multiplikator auf mehreren beruht Faktoren:

  • Ungerade Primzahl: Da es sich um eine ungerade Primzahl handelt, stellt 31 sicher, dass keine Informationen verloren gehen, wenn die Multiplikation zu einem Überlauf führt (im Gegensatz zur Verwendung eines geraden Multiplikators, der einer Verschiebung entspricht). ).
  • Tradition: Verwendung einer Primzahl als Multiplikator üblich.
  • Leistungsoptimierung: 31 hat eine einzigartige Eigenschaft, die Leistungsverbesserungen ermöglicht: 31 * i kann effizient ersetzt werden durch (i << 5) - i. Diese Optimierung wird häufig von modernen virtuellen Maschinen angewendet.

Das obige ist der detaillierte Inhalt vonWarum verwendet Javas „hashCode()' für Strings 31 als Multiplikator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage