El tipo de retorno del método hashCode()
en Java es int
. Un método hashCode()
es proporcionado por Java en la clase de objeto y es por lo tanto parte de todas las clases de Java.
public int hashCode() {
// código del método aquí
}
Este método se utiliza en Java para proporcionar un código hash único para cada objeto, es decir, cada instancia de una clase. Esto es especialmente útil cuando se utilizan colecciones como HashMap, HashSet o Hashtable que utilizan el concepto de hashing. Dichas colecciones almacenan elementos en "cubos" y utilizan el valor de hashCode()
para determinar en cuál cubo colocar un objeto en particular.
El método hashCode()
al ser invocado en un objeto debe retornar consistentemente el mismo valor entero, suponiendo que no se modifique el objeto de manera que afecte la igualdad de comparaciones.
La convención general para el método hashCode()
es que dos objetos que son iguales según el método equals(Object)
deben retornar el mismo valor de hash. Al revés no necesariamente es cierto: dos objetos que no son iguales pueden tener el mismo valor de hash, esto se conoce como colisión de hash y se gestiona internamente en las estructuras de datos basadas en hash.
// Un ejemplo de hashCode() y equals() coherentes
public class Ejemplo {
private int x;
@Override
public boolean equals(Object otro) {
if (this == otro) return true;
if (!(otro instanceof Ejemplo)) return false;
Ejemplo ejemplo = (Ejemplo) otro;
return this.x == ejemplo.x;
}
@Override
public int hashCode() {
return Objects.hash(x);
}
}
En este ejemplo, dos instancias de Ejemplo
son iguales si sus respectivos valores x
son iguales, y por lo tanto generarán el mismo valor de hash. Este es un buen ejemplo de implementación correcta de equals()
y hashCode()
.
En la mayoría de los casos, no tendrás que implementar tu propio método hashCode()
. Sin embargo, si necesitas hacerlo por alguna razón, asegúrate de que la implementación siga las mejores prácticas y esté en línea con cómo has implementado equals()
. Esto garantizará que tus objetos se comporten de manera correcta y predecible en colecciones basadas en hash.