Ich lese Effektive Java 2nd Edition von Joshua Bloch.Was bedeutet der genaue Rückgabewert ihres hashCodes?
In diesem Absatz erwähnt er, dass:
Viele Klassen in der Java-Plattform-Bibliotheken, wie String, Integer und Datum, in ihren Spezifikationen umfassen den genauen Wert durch ihre hashCode Methode als Funktion zurückgegeben des Instanzwerts. Dies ist im Allgemeinen keine gute Idee, da es Ihre Fähigkeit einschränkt, die Hash-Funktion in zukünftigen Versionen zu verbessern. Wenn Sie die Details einer Hash-Funktion nicht näher angeben und ein Fehler gefunden oder eine bessere Hash-Funktion gefunden wird, können Sie die Hash-Funktion in einer späteren Version ändern, ohne dass die Clients von den genauen Werten der Hash-Funktion abhängig sind.
Kann jemand bitte einige Einblicke teilen, was er mit "genauen" Werten meint. Ich habe mir die String-Implementierungsklasse angeschaut, konnte aber immer noch nicht verstehen, was er damit meint ...
Vielen Dank im Voraus!
Dies bedeutet, dass der von 'hashCode()' zurückgegebene Wert im Javadoc angegeben ist. z.B. [siehe 'String.hashCode()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#hashCode()): Dort gibt es eine Formel zur Berechnung der zurückgegebener Wert –
Er meinte wahrscheinlich so etwas wie: 's [0] * 31^(n-1) + s [1] * 31^(n-2) + ... + s [n-1]', das ist die Algorithmus, der im [Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#hashCode%28%29) für 'java.lang.String # hashCode' angekündigt wurde . – Mena
In 'java.lang.Integer' ist es einfach" gleich dem primitiven int-Wert, der von diesem Integer-Objekt dargestellt wird. " - siehe [hier] (https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#hashCode%28%29). – Mena