Gemäß der Java-Dokumentation ist die [Hash-Code](http://java.sun.com/javase/6/docs/api/java/lang/String.html#hashCode()) für eine String
Objekt wird wie folgt berechnet:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
mit
int
Arithmetik, wobeis[i]
ist die i Zeichen der Zeichenkette,n
ist die Länge von der Zeichenkette, und^
bedeutet Potenzierung.
Warum wird 31 als Multiplikator verwendet?
Ich verstehe, dass der Multiplikator eine relativ große Primzahl sein sollte. Warum also nicht 29 oder 37 oder sogar 97?
16 Stimmen
Wenn es 29 oder 37 oder sogar 97 wäre, würden Sie fragen: "Warum nicht 31?
3 Stimmen
@EJP es ist wichtig, den Grund für die Wahl einer Nummer zu kennen, es sei denn, die Nummer ist das Ergebnis eines schwarzen Zaubertricks.
0 Stimmen
Es gibt einen Blogbeitrag von @peter-lawrey darüber hier: vanilla-java.github.io/2018/08/12/ und hier: vanilla-java.github.io/2018/08/15/
1 Stimmen
@DushyantSabharwal Ich will damit sagen, dass es auch wurde 29 oder 37 oder 97 oder 41 oder viele andere Werte, ohne dass dies einen großen praktischen Unterschied macht. Wir haben 1976 37 verwendet.