HashMap, HashTable, ConcurrentHashMap

En el que la estructura de datos se compone de una matriz de cadena añadido, conjunto de teclas, el valor de la lista

En Java, guarde los datos, hay dos estructuras de datos relativamente simples: matrices y listas enlazadas. Características de la matriz es: Abordar fácil, difícil de insertar y eliminar, y la lista de características son: tratar difíciles, inserciones y deleciones fácil. Hemos mencionado anteriormente, el conflicto solución función hash comúnmente usado hay un método llamado una ley dirección de la cadena, de hecho, las matrices y listas unidos entre sí, el juego a la ventaja de ambos, que pueden entenderse como una serie de listas enlazadas .

                                

Podemos ver en el gráfico, es evidente que la izquierda es una matriz, cada miembro de la matriz es una lista enlazada. Todos los elementos de la estructura de datos contiene un puntero contenida, para los enlaces entre los elementos. De acuerdo con nuestros propios elementos característicos del elemento asignado a una lista diferente para ir, a su vez, es lo que nos encontramos con la lista de la derecha de estas características, a continuación, encontrar el elemento correcto de la lista. En el que, el presente método es el cálculo de algoritmo de hash, es decir, el protagonista de esta función hash () de los elementos de la matriz (por supuesto, que comprende además la función indexOf ()) de acuerdo con las características del elemento.

 

Cálculo de conjunto de elementos de subíndice caracteriza por: de hash ()

  HashMap es la longitud de la matriz, Java en un múltiplo predeterminado de esta longitud es sólo 2, valor inicial 16.

  Buscando enfoque simple de hash se toma para encontrar el código hash clave ,, entonces el valor de int código hash obtenido módulo la longitud de la matriz mediante una llamada al objeto hashCode (). Por motivos de rendimiento, Java utiliza la operación total realizado la operación bit a bit de módulo.

 

ConcurrentHashMap se hereda de HashMap, comúnmente utilizado en un hilo de seguridad, fuerte rendimiento en HashMap

resumen

  • HashMap tamaño de inicialización por defecto es 16, después de cada expandido a 2 veces el original.

  • tamaño inicial predeterminado HashTable es 11, expandido a la original después de cada 2n + 1.

  • Cuando el tamaño de la tabla hash es un número primo, un simple resultado de control de módulo será más uniforme, de modo que a partir de este punto solamente, la selección del tamaño de la tabla hash HashTable, de estos parece ser mayor. Debido a que el resultado de control de los más dispersos, mejor.

  • Cuando el cálculo de módulo, si el módulo es una potencia de 2, entonces podemos utilizar operaciones de bits directamente para obtener resultado, la eficiencia es mucho mayor que hacer las divisiones. Así que de la eficiencia de cálculo de hash es aún mejor HashMap.

  • Sin embargo, con el fin de mejorar la eficiencia en las operaciones de bits uso HashMap en lugar de hachís, que a su vez introduce un problema de la distribución desigual de hachís, por lo HashMap para resolver este problema, sino también en el algoritmo de hash ha hecho algunas mejoras, se alteraron calculada (y el terreno elevado bajo se combinan para asegurar que todos los valores de la operación están involucrados, diferentes alta, entonces baja de bits diferentes operaciones parece no aparece fenómeno de colisión de hash).

  • Hashmap y permitir valor de clave es un valor nulo, se determina por si el método que comprende containsKey containsValue y corresponde a la clave-valor; los pares de valores clave HashTable puede ser paquetes de excepción vacíos o puntero nulo.
  • hereda de la clase HashMap de AbstractMap. Pero hemos logrado interfaz Map.
    Diccionario de la clase heredada de Hashtable, diccionario clase es una clase que ha sido descartado (Nota reflejada en el código fuente). clases para padres son abandonados, naturalmente, nadie lo utilizaba una subclase de Hashtable.
  • Hilo de seguridad Hashtable, HashMap seguro para subprocesos
  • La resolución de conflictos en jdk1.8 no es lo mismo
    •   

      1. Si el número de conflictos es inferior a 8, la lista se basa en la resolución de conflictos.
      Entrada 2. Cuando un conflicto es igual a mayor que 8, se almacena como el conflicto convertida ** árbol rojo-negro. **
      3. Cuando el número pero menos de 6, y se almacena en la lista.

    • En la tabla hash, que se almacenan en una lista enlazada.

Supongo que te gusta

Origin www.cnblogs.com/nyhhd/p/12643148.html
Recomendado
Clasificación