Sobes.tech
Junior — Middle

¿Por qué es necesario sobrescribir los métodos hashCode y equals al agregar objetos iguales a un HashSet?

sobes.tech AI

Respuesta de la IA

HashSet en Java utiliza una tabla hash para almacenar elementos. Para determinar correctamente si dos objetos son iguales y no agregar duplicados, HashSet se basa en los métodos hashCode() y equals().

  • El método hashCode() calcula el código hash del objeto, que determina en qué "cesta" (bucket) de la tabla hash será colocado.
  • El método equals() compara dos objetos para verificar si son iguales.

Si no sobrescribes estos métodos en tu clase, se usará la implementación de la clase Object, que compara los objetos por referencia (es decir, dos objetos diferentes con los mismos datos se considerarán diferentes).

Por lo tanto, para que HashSet reconozca correctamente los objetos iguales y no permita duplicados, es necesario sobrescribir hashCode() y equals() de manera que tengan en cuenta los campos importantes del objeto.

Ejemplo:

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

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}

Sin esto, HashSet puede almacenar varios objetos con los mismos datos, lo que viola la lógica del conjunto.