Sobes.tech
Junior — Middle

¿Podría explicar la finalidad del método hashCode y su papel al usar contratos en Java?

sobes.tech AI

Respuesta de la IA

El método hashCode() en Java devuelve un valor entero que representa el hash del objeto. Se utiliza en colecciones basadas en hashing, como HashMap, HashSet.

El papel de hashCode() en el contrato con equals():

  • Si dos objetos son iguales según el método equals(), entonces sus hashCode() deben devolver el mismo valor.
  • Si equals() devuelve false, entonces hashCode() puede devolver diferentes valores, pero no es obligatorio.

Esto es importante para el correcto funcionamiento de las estructuras hash: primero se calcula el hash para determinar la cubeta, y luego se llama a equals() para la comparación exacta.

Ejemplo de sobrescritura:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return field.equals(myClass.field);
}

@Override
public int hashCode() {
    return field.hashCode();
}

El incumplimiento de este contrato puede llevar a un funcionamiento incorrecto de las colecciones y errores difíciles de detectar.