examples example ejemplo create collection java arrays collections hashmap

example - hashmap java ejemplo



HashMap tiene una matriz de respaldo, entonces ¿por qué está desordenada? (2)

Depende de tu visión de lo que significa ordenado .

De hecho, los HashMaps usan internamente una matriz u otra colección que tiene un orden fijo . Sin embargo, el orden no tiene nada que ver con el orden de inserción o algo así. Los elementos están ordenados , por ejemplo, para aumentar el tamaño de sus valores hash y no tienen nada que ver con un orden real de los elementos mismos.

Entonces, HashMap tiene algo así como un método get(n) si piensas que n es el valor hash del elemento clave. El método se llama get(*key*) y primero calcula el valor hash del elemento clave dado y luego busca el valor en la estructura interna usando get(*hash-value*) en él.

Aquí hay una imagen de un rendimiento de búsqueda rápida que muestra la estructura de HashSet s:

Tenga en cuenta que los HashSet s son algo HashMaps a los HashMaps , usan la misma técnica y se aplica la misma imagen. Pero en lugar de simplemente insertar un elemento, un mapa inserta un contenedor que se identifica con la clave y además contiene un valor.

Solo como una pequeña descripción. Una función hash es una función que, dado un objeto, calcula un pequeño valor, el valor de hash fuera de él, usando sus propiedades. Por lo general, el cálculo se puede realizar rápidamente y, por lo tanto, también es rápida una búsqueda en la matriz interna en la posición dada por el valor hash.

Para su pregunta específica, como usuario de un HashMap generalmente no está interesado en qué elementos se esconden específicamente detrás del valor de hash 1 o 2 y así sucesivamente, es por eso que no incluyeron dicho método. Sin embargo, si realmente necesita hacer eso para una aplicación especial o más de lo que siempre puede intentar usar Reflection para acceder a las partes internas de su HashMap o también puede simplemente escribir un pequeño contenedor alrededor de la clase que proporciona dicho método.

Leí que HashMap tiene una matriz de respaldo, donde las entradas están almacenadas (marcadas con el número de canasta, tamaño inicial 16). Las matrices están ordenadas, y puedo llamar a get (n) para obtener el elemento en la enésima posición. Entonces, ¿por qué HashMap está desordenado y no tiene el método get (n)?


Un HashMap está dividido en cubos individuales. Al principio, los depósitos son respaldados por una matriz; sin embargo, si los depósitos son demasiado grandes, se convierten en estructuras de árbol que se ordenan en función de los códigos hash. Ese solo hecho destruye cualquier garantía que pueda tener sobre preservar el orden de inserción.

Si desea obtener más información sobre cómo se implementa, puede ver mi respuesta a esta pregunta: implementación de HashMap Java 8