Repaso
English
Java CoreIntermedioJV-14

Si sobrescribes equals() en una clase, ¿qué más debes sobrescribir y por qué?

Opciones

  1. toString(), para que el objeto se imprima de forma legible
  2. hashCode(), porque los objetos iguales deben tener el mismo hash code (Opción correcta)
  3. clone(), para que los objetos iguales también se puedan copiar
  4. Nada más, porque equals() funciona por sí solo

Respuesta

hashCode(), porque los objetos iguales deben devolver el mismo hash code o HashMap/HashSet funcionarán mal

Por qué

El contrato es: si a.equals(b) es true, entonces a.hashCode() == b.hashCode() debe ser true.

HashMap y HashSet primero usan el hash code para elegir un bucket (un espacio de almacenamiento), y solo entonces llaman a equals dentro de ese bucket. Si dos objetos iguales tienen hash codes distintos, caen en buckets distintos y el map no encontrará uno al buscar con el otro.

Calcula hashCode con los mismos campos que usas en equals (Objects.hash(a, b)), o usa un record.

Recuerda

Si sobrescribes equals => sobrescribe hashCode con los mismos campos.

Términos clave

Practica esta pregunta en Repaso