Aquí está el código de ejemplo del artículo 9:necesitan de explicación, por ejemplo, código hash en el libro de texto Effective Java
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 estados: "el valor 31 fue elegido porque es un extraña primer Si se tratara. incluso y la multiplicación se desbordó, la información se perdería, ya que la muiltiplicación por 2 es equivalente a un cambio ".
Entiendo que el concepto de multiplicación por 2 es equivalente al cambio de bit. También sé que todavía obtendremos un desbordamiento (por lo tanto, pérdida de información) cuando multiplicamos un número grande por un número primo impar grande. Lo que no entiendo es por qué la pérdida de información que surge de la multiplicación por primos impares grandes es preferible a la pérdida de información que surge de la multiplicación por grandes números pares.
distinto de 2, ningún otro número par es primo –
omg! No puedo creer que olvidé esto. Creo que acabo de tener un momento tonto hoy. Gracias :) – Kes115
Esto puede ser un duplicado de http://stackoverflow.com/questions/299304/why-does-javas-hashcode-in-string-use-31-as-a-multiplier. –