제이온

equals() vs hashCode()

Creado: 2024-04-25

Creado: 2024-04-25 22:29

equals()

equals() compara si el contenido de los objetos es el mismo. Comúnmente se le llama comparación de igualdad, y si no se redefine equals(), internamente es igual a ==, por lo que se convierte en una comparación de identidad. Por lo tanto, si se desea comparar correctamente la igualdad de los objetos, se debe usar siempre equals().



hashCode()

hashCode() verifica si dos objetos son el mismo objeto. Tiene la misma función de comparación de identidad que ==, pero el método hashCode() devuelve un valor entero único del objeto durante el tiempo de ejecución como valor de retorno. Generalmente, devuelve la dirección de memoria del objeto almacenado en Heap.



Este método tiene la palabra clave native, lo que significa que es una palabra clave que se usa cuando se usa un lenguaje desarrollado en un lenguaje que no sea Java en Java.


¿Qué es hash?

El hash es el proceso de usar una función hash para generar un valor de salida de tamaño fijo a partir de un valor de entrada de tamaño variable. El valor obtenido a través del hash se llama código hash.


equals() y hashCode()

Dado que los objetos idénticos deben tener la misma dirección de memoria, es obvio que los objetos idénticos deben tener el mismo código hash. Por lo tanto, es deseable escribir código para garantizar el mismo código hash redefiniendo no solo equals() sino también hashCode().


Estructura de datos hash


Intentemos insertar dos objetos iguales en la estructura de datos HashSet como se muestra arriba. Si se imprime el tamaño de ese conjunto, será 2. ¿Por qué?


Esto se debe a que la estructura de datos que usa hash usa hashCode() para determinar la clave. Es decir, antes de comparar si los objetos son iguales, compara si los códigos hash de los dos objetos son iguales y luego determina si los dos objetos son iguales. En este caso, si hashCode() no se redefine, se usa hashCode() de Object, por lo que se devuelve la dirección de memoria donde se almacena cada objeto. Por lo tanto, es aconsejable redefinir hashCode() además de equals() para los casos en que se usa una estructura de datos hash.



Fuente


Preguntas y respuestas esperadas en la entrevista

¿Por qué se usan equals() y hashCode() juntos?

Esto se debe a que la estructura de datos que usa hash usa hashCode() para determinar la clave. Es decir, antes de comparar si los objetos son iguales, compara si los códigos hash de los dos objetos son iguales y luego determina si los dos objetos son iguales. En este caso, si hashCode() no se redefine, se usa hashCode() de Object, por lo que se devuelve la dirección de memoria donde se almacena cada objeto. Por lo tanto, es aconsejable redefinir hashCode() además de equals() para los casos en que se usa una estructura de datos hash.

Comentarios0