Hier ist der Code Probe von Punkt 9:Erklärung Notwendigkeit hashcode Beispiel in Effective Java Lehrbuch
public final class PhoneNumber {
private final short areaCode;
private final short prefix;
private final short lineNumber;
@Override
public int hashCode() {
int result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
return result;
}
}
Pg 48 Staaten: „der Wert 31 wurde gewählt, weil es sich um eine ungerade Primzahl ist Wäre es. selbst wenn die Multiplikation übergelaufen wäre, wäre die Information verloren, da die Multiplikation mit 2 der Verschiebung gleichkommt. "
Ich verstehe das Konzept der Multiplikation mit 2 entspricht Bitverschiebung. Ich weiß auch, dass wir immer noch einen Überlauf (daher Informationsverlust) bekommen werden, wenn wir eine große Zahl mit einer großen ungeraden Primzahl multiplizieren. Was ich nicht verstehe ist, warum Informationsverlust, der durch Multiplikation mit großen ungeraden Primzahlen entsteht, einem Informationsverlust vorzuziehen ist, der sich aus der Multiplikation mit großen geraden Zahlen ergibt.
andere als 2, keine andere gerade Zahl ist prime –
omg! Ich kann nicht glauben, dass ich das vergessen habe. Ich denke, ich hatte gerade einen Moment der Dummheit. Danke :) – Kes115
Dies kann ein Duplikat von http://stackoverflow.com/questions/299304/why-does-javashashashcode-in-string-use-31-as-a-multiplier sein. –