Saltar al contenido

¿Cuál es más rápido, String o Integer como hashkey en Java?

Nuestros mejores investigadores agotaron sus reservas de café, por su búsqueda día y noche por la respuesta, hasta que José encontró el resultado en GitLab así que ahora la compartimos con nosotros.

Solución:

Integer funcionará mejor que String. El siguiente es el código para el cálculo del código hash para ambos.

Implementación de código hash entero

/**
     * Returns a hash code for this Integer.
     *
     * @return  a hash code value for this object, equal to the 
     *          primitive int value represented by this 
     *          Integer object. 
     */
    public int hashCode() 
    return value;
    

Implementación de código hash de cadena

 /**
     * Returns a hash code for this string. The hash code for a
     * String object is computed as
     * 
     * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
     * 

* usando int aritmética, donde s[i] es el * iel carácter del string, n es la longitud de * el stringy ^ indica exponenciación. * (El valor hash del vacío string es cero.) * * @return un valor de código hash para este objeto. */ public int hashCode() int h = hash; if (h == 0) int off = desplazamiento; valor char[] = valor; int len ​​= cuenta; for (int i = 0; i < len; i++) h = 31*h + val[off++]; hash = h; devuelve h;

Si tiene un problema de rendimiento, es muy poco probable que el problema se deba a HashMap/HashTable. mientras hash string es un poco más caro que los enteros hash, es una diferencia bastante pequeña, y hashCode se almacena en caché, por lo que no se vuelve a calcular si usa el mismo string objeto, es poco probable que obtenga un beneficio de rendimiento significativo al convertirlo primero a entero.

Probablemente sea más fructífero buscar en otro lugar el origen de su problema de rendimiento. ¿Ya intentaste perfilar tu código?

Si tienes alguna vacilación o capacidad de reaccionar nuestro crónica te proponemos escribir una crítica y con mucho placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *