marco de recopilación de HashMap detallada

Aquí Insertar imagen Descripción

I. Introducción

  • HashMap usando el subyacente 数组+链表implementación 线程不安全de la Key-Valueestructura.

II. Principio

  1. Elemento insertado
    a través de put () método que pasa par clave-valor, la primera llamada hashCode clave () para devolver un valor de hash, módulo de la longitud de la matriz por un valor hash (es decir index = HashCode(Key) % Array.length) para encontrar la ubicación correspondiente a la matriz, y después de atravesar la lista en la lista se determina existe esta clave, si la lista ya esta clave (es decir, se produce la colisión de hash, la solución son: método de direccionamiento abierto, método de la lista, y luego hash, establecer área de desbordamiento común), HashMap usando el método de la lista de resolver Ja conflicto griega, reemplazando el antiguo con el nuevo valor valor valor valor, si no esta tecla para insertar el par clave-valor 链表头部(antes java8) o 链表尾部(java8 más adelante).

    开放寻址法:寻找下一个空的散列地址;
    链表法:头插法和尾插法;
    再哈希法:有多个不同的Hash函数,使用第二个,第三个,….,等哈希函数计算地址,直到无冲突;
    建立公共溢出区:将哈希表分为基本表和溢出表两部分,和基本表发生冲突的元素填到溢出表
    
  2. Tamaño de inicialización: 16

  3. mecanismo de expansión
    (1) factores que afectan a la expansión
    Capacidad: HashMap es decir longitud actual;
    loadFactor: HashMap es decir, factor de carga, el valor predeterminado es 0.75f.

    (2) para medir la expansión de la condición:HashMap.Size >= Capacity x LoadFactor

    (3) pasos de expansión
    扩容: crear un nuevo array entrada vacía, la matriz es la longitud original de 2 veces ;:
    ReHashEntrada atravesar la matriz original, todas las entradas de la re-Hash en una nueva matriz, que es el propósito original lo más uniforme posible de Entrada la asignación.

  4. Cabeza y la cola de interpolación interpolación
    "interpolación cabeza": Antes de Java8, utilizando el primer método de interpolación, par clave-valor está a punto de ser insertado en la cabeza de la lista. Se puede cambiar la posición del elemento en una nueva matriz de expansión cuando, en las circunstancias concurrentes puede ocurrir 环形链表.

    "Interpolación de cola": después de Java8 antes, el método de interpolación de cola, par clave-valor está a punto de ser insertado en la cola de la lista. No cambia la posición del nuevo elemento de la matriz durante la expansión, no será lista enlazada circular.

  5. mejora java8
    ; post (1) Java8, utilizando un conjunto de árbol rojo-negro para lograr + + cadena, superior al tamaño de la lista es igual a 8, se cambiará automáticamente al árbol rojo-negro; borrada cuando menos de 6, se convierte de nuevo la lista
    antes (2) Java8 utilizando la primera interpolación; antes después Java8, cola-interpolación.

Tres. HashMap es el embalaje seguro para subprocesos

  • Por el Collections.synchronizedMap () para un paquete de hilo HashMap seguridad;
  • Principio: SynchronizedMap interna mantiene un mutex Mapa y exclusión mutua.

IV. La comparación de la HashMap y Hashtable

  • Con: los dos elementos son no ordenada, el factor de carga fue de 0,75;
  • diferente
HashMap Tabla de picadillo
La capacidad inicial dieciséis 11
mecanismo de expansión 2 veces 2x 1
padre AbstractMap Diccionario
iterador iterador empadronador
Fast / fallo de seguridad fail-fast (fallo rápido) a prueba de seguro (fallo de seguridad)
Publicado 70 artículos originales · ganado elogios 4 · Vistas 6376

Supongo que te gusta

Origin blog.csdn.net/qq_44837912/article/details/104378479
Recomendado
Clasificación