Java siempre sobrescribe al hashcode cuando sobrescribe es igual a
Recientemente, he aprendido el conocimiento básico de Java. Cuando me encuentro con Java Cubre iguales, siempre tengo muchas preguntas cuando tengo que sobrescribir el hashcode. Después de discutir directamente con mis colegas y consultar la información en línea, la ordenaré aquí para ayudar a todos a comprenderla y hay instrucciones en el código.
Código de implementación específico:
paquete cn.xf.cp.ch02.item9; import java.util.hashmap; import java.util.map; public class Phonenumber {private final de área corta final; Prefijo corto de cortos finales privados; Final de lino final privado; Public PhoneNumber (int AreaCode, Int Prefix, int Linenumber) {RangeCheck (AreaCode, 999, "Código de área"); rangecheck (prefijo, 999, "prefijo"); Rangecheck (Linenumber, 9999, "Número de línea"); this.areAcode = (Short) AreaCode; this.prefix = (Short) prefijo; this.lineEnumber = (corto) Linenumber; } private static void rangecheck (int arg, int max, name de cadena) {if (arg <0 || arg> max) tirar nueva ilegalArgumentException (nombre + ":" + arg); } @Override public boolean iguales (objeto o) {if (o ==) return true; if (! (o instancia de phoneenumber)) devuelve falso; PhoneNumber Pn = (PhoneNumber) O; return pn.linEnumber == Linenumber && pn.prefix == prefix && pn.areAcode == área de code; } /* @Override // Como por qué se usa 31, este es el valor recomendado. Los estudios han demostrado que este número funciona mejor cuando se usa public int hashcode () {int result = 17; Resultado = 31 * Result + AreaCode; resultado = 31 * resultado + prefijo; Resultado = 31 * Result + Linenumber; resultado de retorno; } */// Si un objeto no cambia con frecuencia y tiene una sobrecarga alta, debe considerar el caché de código hash dentro del objeto // variables modificadas con volátiles, el hilo leerá el valor más modificado de la variable cada vez que usa la variable. privado volátil int hashcode; @Override public int hashcode () {int resultado = hashcode; if (resultado == 0) {resultado = 17; Resultado = 31 * Result + AreaCode; resultado = 31 * resultado + prefijo; Resultado = 31 * Result + Linenumber; hashcode = resultado; } resultado de retorno; } public static void main (string [] args) {map <phoneEnumber, string> m = new HashMap <PhonEnumber, String> (); M.put (nuevo PhoneNumber (707, 867, 5309), "Jenny"); // Jenny no será devuelto aquí, devolverá NULL, porque ponen objetos en diferentes cubos de hash System.out.println (m.get (new PhoneNumber (707, 867, 5309))); }}Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!