método eqauls y método hashCode

1. El método eqauls y el método hashCode en Java

(1) Si dos objetos son iguales (el método igual devuelve verdadero), entonces sus valores hashCode deben ser los mismos

(2) Si el código hash de dos objetos es el mismo, no son necesariamente el mismo (no necesariamente el mismo objeto)

Si viola los principios anteriores, encontrará que al usar contenedores, los mismos objetos pueden aparecer en la misma colección Set (Set no puede almacenar los mismos elementos), y la eficiencia de agregar nuevos elementos se reducirá en gran medida (para sistemas que usan almacenamiento hash , Si la colisión frecuente de códigos hash provocará una fuerte caída en el rendimiento del acceso)

 

2. Características del método igual

(1) reflexividad

x.equals (x) : verdadero

(2) simetría

Cuando x.equals (y) devuelve verdadero, y.equals (x) también debe devolver verdadero

(3) Transmisibilidad

Cuando tanto x.equals (y) como y.equals (z) devuelven verdadero, x.equals (z) también debe devolver verdadero

(4) Consistencia

Cuando la información del objeto referenciada por xey no se ha modificado, las llamadas múltiples a x.equals (y) deben obtener el mismo valor de retorno, y para cualquier referencia no nula x, x.equals (null) debe devolver false

 

3. Know-how para lograr iguales de alta calidad

(1) Use el operador == para verificar si "el parámetro es una referencia a este objeto"

(2) Use el operador instanceof para verificar si "el parámetro es del tipo correcto"

(3) Para los atributos clave en la clase, verifique si los atributos de los parámetros pasados ​​al objeto coinciden

(4) Después de escribir el método de igualdad, pregúntese si satisface la simetría, transitividad, consistencia

(5) Siempre reescribe el código hash cuando reescribir sea igual

(6) No reemplace el objeto Object en el parámetro igual método con otros tipos, y no olvide anotar @Override al reescribir

 public  boolean equals (Object obj) {
         // Determine el objeto actual y el objeto pasado 
        if ( this == obj) {
             return  true ; 
        } 
        // Determine si el objeto pasado es del tipo Person 
        if (! (obj instanceof Person)) {
             return  false ; 
        } 
        // Transforme obj a la referencia de Perosn, puede acceder al contenido único de Person, de lo contrario solo puede acceder al contenido común 
        Person p = (Person) obj;
         devuelva  este .age == p.age && this .name == p.name; 
    }

 

Supongo que te gusta

Origin www.cnblogs.com/zhai1997/p/12722440.html
Recomendado
Clasificación