En el lenguaje de programación Java un HashCode es un identificador de 32 bits que se almacena en un Hash en la instancia de la clase. Toda clase debe proveer de un método hashCode() que permite recuperar el Hash Code asignado, por defecto, por la clase Object. El HashCode tiene una especial importancia para el rendimiento de las tablas hash y otras estructuras de datos que agrupan objetos en base al cálculo de los HashCode.
Todas las clases heredan de java.lang.Object un sistema básico para el uso de hash, aunque es común sobreescribir este para obtener una función hash que maneje de forma más específica los datos contenidos.
Normalmente se sobrescribe el método para que se comporte de forma acorde a la que lo hace .equals(), es decir, si el método .equals() dice que si dos objetos son iguales, estos han de tener el mismo valor hash.
No hay requisitos que obliguen a mantener el mismo hash en diferentes implementaciones de Java o ejecuciones, es más, aunque lo ideal es que no existan, no es fundamental que no existan colisiones de hash.[1]

Función hashCode() de los objetos String

editar

En las primeras versiones de Java, el hash code de un objeto String se calculaba con base en los primeros 16 dígitos, algo que resultaba muy ineficaz a la hora de implementar tablas hash, por lo que desde Java 1.2, el hash code se calcula con base en todos los elementos del String siguiendo la siguiente fórmula:

Ejemplo

editar

En este ejemplo se genera un hash code para un objeto Empleado basándonos en su ID, el hash code de su nombre y de su departamento. Cuanto más elaborada sea la función menos colisiones existirán en nuestro hash.

public class Empleado {
    int        IDempleado;
    String     nombre;
    Departamento dept;

    // Métodos de la Clase 

    @Override
    public int hashCode() {
        int hash = 1;
        hash = hash * 17 + IDempleado;
        hash = hash * 31 + nombre.hashCode();
        hash = hash * 13 + ((dept == null) ? 0 : dept.hashCode());
        return hash;
    }
}

Referencias

editar
  1. java.lang.Object.hashCode() documentation, Documentación Java SE 1.5.0, Oracle Inc.

📚 Artikel Terkait di Wikipedia

Object Pascal

programación Object Pascal, pero que más tarde, tras introducir cambios en el mismo se lo cambió por Delphi. Embarcadero Delphi (anteriormente CodeGear Delphi

Plain Old CLR Object

POCO es un acrónimo de Plain Old CLR Object. Es un juego de palabras del POJO de la plataforma Java, y es utilizado por los desarrolladores de la plataforma

Embarcadero Delphi

Pascal llamada Object Pascal. Es producido comercialmente por la empresa Embarcadero Technologies desde mayo de 2008, tras adquirir CodeGear (antes lo

Executable and Linkable Format

executables. We already have seen they can be used for partial pieces (object code). Another example is shared libraries or even core dumps (those core

Código de pañuelos

Push to Revive the Hanky Code for a New Queer Population». Hornet (en inglés). Consultado el 18 de febrero de 2022.  «Object of the Month May: Leather

Software de dominio público

Games Microcomputer Edition PDF. Consultado el 31 de julio de 2025.  Object code only: is IBM playing fair? IBM's OCO policy protects its own assets but

Boost Software License

copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS

IBATIS

Web oficial: http://www.mybatis.org/ Web Google Code: http://code.google.com/p/mybatis/ Data Access Object Hibernate Cat Fight in a Pet Store: J2EE vs..NET