Si sobrescribes equals() en una clase, ¿qué más debes sobrescribir y por qué?
Opciones
toString(), para que el objeto se imprima de forma legiblehashCode(), porque los objetos iguales deben tener el mismo hash code (Opción correcta)clone(), para que los objetos iguales también se puedan copiar- 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.