En realidad, algunos de los actuales implentations Hashmap son realmente hechos de matrices a medida que proponen. Permítanme esbozar cómo funciona esto:
Hash Función Una función hash transforma sus llaves en un índice para la primera matriz (matriz K). Para esto se puede usar una función hash como MD5 o una más simple, que generalmente incluye un operador de módulo.
Cubetas Una implementación de Hashmap basada en una matriz simple podría usar cubos para hacer frente a las colisiones. Cada elemento ('cubo') en el conjunto K contiene un conjunto (conjunto P) de pares. Al agregar o consultar un elemento, la función hash lo dirige al cubo correcto en K, que contiene la matriz deseada P. Luego itera sobre los elementos en P hasta que encuentra una clave coincidente, o asigna un nuevo elemento al final de P.
teclas de asignación de cubos utilizando el hash Usted debe asegurarse de que el número de cubos (es decir, el tamaño de K) es una potencia de 2, digamos que 2^b. Para encontrar el índice de cubo correcto para alguna clave, calcule Hash (clave) pero solo guarde los primeros b bits. Este es su índice cuando se lanza a un número entero.
Rescaling Calcular el hash de una tecla y encontrar el cubo correcto es muy rápido. Pero una vez que un cubo se llena, tendrá que repetir más y más elementos antes de llegar a la correcta. Por lo tanto, es importante tener cubos suficientes para distribuir correctamente los objetos, o su Hashmap será lento.
Como generalmente no sabe cuántos objetos desea almacenar en el Hashmap de antemano, es conveniente aumentar o reducir dinámicamente el mapa. Puede contar el número de objetos almacenados, y una vez que supera un determinado umbral, vuelve a crear toda la estructura, pero esta vez con un tamaño mayor o menor para la matriz K.De esta forma, algunos de los cubos en K que estaban muy llenos ahora tendrán sus elementos divididos en varios cubos, por lo que el rendimiento será mejor.
Alternativas También puede utilizar una matriz de dos dimensiones en lugar de una matriz-de-matrices, o puede intercambiar arreglo P para una lista enlazada. Además, en lugar de mantener un conteo total de los objetos almacenados, simplemente puede optar por recrear (es decir, reescalar) el hashmap una vez que uno de los depósitos contiene más de una cantidad configurada de elementos.
Una variación de lo que está preguntando se describe como 'tabla hash de matriz' en el Hash table Wikipedia entry.
Código Para muestras de código, consulte here.
Espero que esto ayude.
Podría ser un poco más preciso? ¿Qué quieres lograr exactamente? ¿Estás apuntando a un idioma específico o no? – romaintaz
@romaintaz por favor ver arriba para la aclaración – locoboy