Sobrescribiendo Object.hashCode()

El método hashCode() de la clase Object tiene la siguiente firma:

public int hashCode()

Devuelve un identificador único que permite identificar objetos de forma unívoca. Idealmente:

  • Debe devolver valores distintos para objetos distintos
  • Debe devolver el mismo valor para dos objetos si el resultado de la función equals() es true
  • Si se sobrescribe equals(), también se deberá sobrescribir hashCode() en una clase
  • equals() y hashcode() deberían ser calculados a partir del mismo conjunto de propiedades

Existen varias formas de implementar el método hashCode():

  • Sistema 17-31
    @Override
    public int hashCode() {
       int resultado = 17;
       resultado = 31 * resultado + DNI.hashCode();
       resultado = 31 * resultado + Nombre.hashCode();
       resultado = 31 * resultado + Apellidos.hashCode();
       resultado = 31 * resultado + Peso; 
    
       return resultado;
    }
  • A partir de Java 7, mediante java.util.Objects.hash() 
    @Override
    public int hashCode() {
       return java.util.Objects.hash(this.Nombre, this.Apellidos, this.DNI, this.Peso);
    }
hashCode() de la clase Object tiene la siguiente firma:

public int hashCode()

Devuelve un identificador único que permite identificar objetos de forma unívoca. Idealmente:

  • Debe devolver valores distintos para objetos distintos
  • Debe devolver el mismo valor para dos objetos si el resultado de la función equals() es true
  • Si se sobrescribe equals(), también se deberá sobrescribir hashCode() en una clase
  • equals() y hashcode() deberían ser calculados a partir del mismo conjunto de propiedades

Existen varias formas de implementar el método hashCode():

  • Sistema 17-31
    @Override
    public int hashCode() {
       int resultado = 17;
       resultado = 31 * resultado + DNI." data-share-imageurl="" style="position:fixed;bottom:0px;left:0px;">