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

JavaServer Pages

JavaServer Pages (JSP) es una tecnología que ayuda a los desarrolladores de software a crear páginas web dinámicas basadas en HTML y XML, entre otros tipos

Configuración limitada de dispositivos conectados

capacidad de reflexión de Java standard edition: El paquete java.lang.reflect​ y ninguna de sus clases está soportado. Métodos en java.lang.Class​ la cual obtiene

Google Web Toolkit

clases de Java: java.lang en donde se encuentran las clases fundamentales para poder programar en Java y un subconjunto de las clases del paquete java.util

Paquete Java

Un Paquete en Java es un contenedor de clases que permite agrupar las distintas partes de un programa y que por lo general tiene una funcionalidad y elementos

JAXB

Java Architecture for XML Binding (JAXB) permite a los desarrolladores Java asignar clases de Java a representaciones XML. JAXB proporciona dos características

Jython

pequeña ventana usando Swing: from pawt import swing import java def salir(event): java.lang.System.exit(0) frame = swing.JFrame('Ejemplo Swing', visible=1)

XDoclet

finder * signature="java.util.Collection findAll()" * unchecked="true" * * @ejb.finder signature="java.util.Collection findByName(java.lang.String name)" *

Búfer de cadena

StringBuffer. StringBuffer y StringBuilder se incluyen en el paquete java.lang. La plataforma Microsoft .NET tiene una clase StringBuilder en su Base