El papel del hash (clave)

El problema

Una pregunta hoy: sabemos que la función hashCode () de la clase Object se usa para asignar objetos a valores int en una tabla hash, y luego calcular el valor hash de acuerdo con este valor int para determinar su posición en la tabla hash , En Hashtable puedes ver cómo hizo esto:

int hash = key.hashCode ();
int index = (hash & 0x7FFFFFFF)% tab.length;

Pero en HashMap,

static final int hash (clave de objeto) {
int h;
retorno (clave == nulo)? 0: (h = key.hashCode ()) ^ (h >>> 16);
}
pestaña putVal (hash (clave), clave, valor, falso, desalojar)
[i = (n - 1) y hash]

Se puede ver que primero llamó a la función hash (clave) y luego la procesó. La pregunta de hoy es, ¿qué hace esta función para preprocesar el código hash?
ps: no conteste el puntero nulo, esto no es lo que esta pregunta quiere hacer.

La respuesta

Esta función es muy simple, es decir, usa los bits altos y bajos del código hash para hacer una operación XOR, entonces, ¿cuál es su función?

Este problema comienza con el rendimiento de HashMap. Sabemos que el rendimiento de la búsqueda y adición de HashMap está completamente relacionado con la longitud de la lista vinculada correspondiente al valor hash actual, y la longitud de la lista vinculada es el número de valores hash de los datos almacenados en el HashMap actual y el valor hash de HashMap Se utiliza el resto del hash (clave) dividido por la longitud de la pestaña (debe ser un exponente de 2), que es el número de bajo orden de hash (clave), por lo que este método usa el alto orden y el estado para realizar una operación XOR juntos, lo que puede aumentar el bajo orden Grado desordenado, reduce la posibilidad de un valor hash igual, para mejorar el rendimiento de HashMap.

Publicado 19 artículos originales · elogiado 8 · visitas 4040

Supongo que te gusta

Origin blog.csdn.net/u014068277/article/details/103951235
Recomendado
Clasificación