Colección de mapas de análisis de código fuente ----

Estructura de clase de implementación Mapa

   Mapa : doble fila de datos, los datos almacenados en pares de valores clave

   HashMap : Mapa de la clase como el principal logro; flujos seguros, de alta eficiencia; nula y puede almacenar el valor de la clave

   El respaldo HashMap :
      lista de arreglo + -> JDK7 antes
      gama + + lista de árbol rojo-negro -> jdk8

   Un LinkedHashMap : garantizada al atravesar el elemento de mapa, se puede lograr recorrido (con el fin de añadir la razón: la estructura de la original en la parte inferior de la HashMap, la adición de un par de punteros, un elemento frontal y un señalador posterior a la operación de recorrido frecuente, tales la eficiencia es mayor que HashMap)

   TreeMap : garantía de conformidad con la clave-valor añadido por el estilo, para lograr el recorrido tipo. En este momento, teniendo en cuenta la clave o el orden natural de pedidos a medida, utilizando el árbol rojo-negro que subyace

   Tabla hash : A medida que la vieja clase de implementación: seguro para subprocesos, la baja eficiencia no puede almacenar el valor llave y nula

   Las Propiedades : Se utiliza para manejar los archivos de configuración. clave y el valor son de tipo String


Mapear la comprensión de la estructura:

   Mapear la tecla : desordenada, irrepetible, utilizar las tiendas de establecer todas la tecla -> clave de clase en la que desea sobrescribir equals y hashCode () (a HashMap por ejemplo)

   Mapa de valor : desordenado, repetible, todos de valor> clase en la que el valor utilizado para reescribir el almacenamiento Colección igual a ()

   Un par clave-valor : valor clave objeto de entrada constituye una

   Mapa de entrada : desordenada, irrepetible, utilizar el conjunto de tiendas de todas las entradas

Dos maneras de atravesar la clave-valor

   Método 1 :

Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
      Object obj = iterator1.next();
      //entrySet集合中的元素都是entry
      Map.Entry entry = (Map.Entry) obj;
      //entry.getKey(),entry.getValue()
}

   Segunda manera :

Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
      Object key = iterator1.next();
      Object value = map.get(key);
}

La realización del principio subyacente HashMap? (JDK7 por ejemplo)
  HashMap map = new HashMap();
  在实例化以后,底层创建了长度是16的一维数组Entry[] table
  ... 可能已经执行过多次put ...
  map.put(key1, value1);

En primer lugar, llamando a la key1 clase hashCode donde () key1 calcula el valor de hash, el valor hash después de después de un algoritmo de cálculo para obtener la ubicación de almacenamiento en la matriz de entrada.

   Si los datos de esta posición vacía, en este caso key1-valor1 añadido correctamente. -----> 1.
   Si los datos de esta posición no está vacío, (esto significa posición de que no es uno o más de datos (presente en forma de una lista enlazada)), y uno o más key1 comparación de los datos existentes valor hash:

         Si el valor hash con el valor hash key1 datos existentes no son lo mismo, a continuación, añadir el éxito key1-valor1. ----> Caso 2
         valores hash idénticos y si un ciertos datos (clave2 -value2) valor hash key1 ya existente, la comparación continúa: llamar a la clase donde key1 iguales (Key2):

                Si iguales () devuelve falso: En este momento, añadir key1-valor1 éxito ----> 3, donde
                si equals () devuelve verdadero: el uso de valor2 valor1 alternativa

   2 y 3 sobre la situación: El caso key1-valor1 y los datos originales se almacena en una lista enlazada

   Añadir en el proceso constante de expansión implicará el problema, cuando se supera el umbral (y que se almacena la posición no está vacío), la expansión. El modo por defecto de la expansión: expansión de la capacidad original de 2 veces, y la copia más de la matriz original

jdk8 comparada con diferentes JDK7 en términos de la implementación subyacente:

   1, newHashMap (): la capa inferior no crean una matriz de longitud 16

   2, parte inferior jdk8 de la matriz es: Node [], en lugar de la Entrada []

   3, la primera llamada para poner () para crear la matriz subyacente de longitud 16

   4, solamente subestructura JDK7: + lista de arreglo. jdk8 la estructura subyacente: Array + + lista de árbol negro

   Cuando el número de elementos de datos en una cierta posición en el índice de matriz está presente como una lista> y la longitud actual de la matriz 8> 64, momento en el cual todos los datos en la posición del árbol de índice se almacena a rojo-negro

DEFAULT_INITIAL_CAPACITY : La capacidad por defecto es 16 Hashmap

DEFAULT_LOAD_FACTOR : el factor de carga por defecto HashMap: 0,75

umbral : umbral de expansión, = capacidad de factor de relleno *: 0,75 * 16 -> 12

TREIFY_THRESHOLD : Bucket en la longitud de cadena es mayor que el valor predeterminado, se convierte en árbol rojo-negro: jdk8

MIN_TREEIFY_CAPACITY Capacidad de la bandeja de dispersión mínimo de la bañera es árbol de nodos: 64


El principio que subyace a la LinkedHashMap

   fuente :

        static class Entry<K,V> extends HashMap.Node<K,V>{
              Entry<K,V> before, after;//能够记录添加的元素先后顺序
              Entry(int hash, K key, V value, Node<K,V> next){
                    super(hash, key, value, next);
              }
        }

La herencia HashMap, usando las teclas en el nodo es el nodo Hashmap Entidad que ha heredado y ha añadido dos referencias, respectivamente, antes y después. Para el mantenimiento de una lista doblemente enlazada


TreeMap:

    Agregando a la clave-valor TreeMap, debe ser solicitado por el objeto creado en la misma clase
   como para ser ordenados de acuerdo a la clave: orden natural, la clasificación personalizada (no ordenados por valor!)

ordenamiento natural : Comparable interfaz implementada, compareTo override método
de pedido de encargo : nuevo comparador () de la clase interna


Propiedades: se utiliza para los archivos de configuración mango, clave y valor son de tipo String
Properties pros = new Properties();
FileInputStream fis = new FileInputStream("jdbc.properties");
pros.load(fis);//加载流对应的文件
pros.getProperty("文件中对应的值");
发布了67 篇原创文章 · 获赞 19 · 访问量 9873

Supongo que te gusta

Origin blog.csdn.net/qq_41530004/article/details/103923932
Recomendado
Clasificación