Aprendizaje en línea de Luban Academy java
Hoy hablamos de la colección de mapas súper importante en java.
1. Descripción general de la colección de mapas
Interfaz pública Mapa <K, V>
En primer lugar, en la interfaz del mapa, podemos ver que la estructura de valores almacenados del mapa está estructurada en pares clave-valor. En términos simples, la colección de mapas es un objeto que asigna claves a valores. Y un mapa no puede contener duplicados. Las claves; cada clave solo se puede asignar a un valor.
2. Estructura de almacenamiento de mapas
Como se muestra en la figura anterior, la forma de almacenar datos en el mapa es que una clave corresponde a un valor de valor, y el valor de la clave puede ser nulo, pero debido a que el valor de la clave no se puede repetir, el caso de que la clave sea nula solo puede suceder una vez y el valor del valor no se realiza. Requisito, se puede repetir o nulo múltiple, un par de pares clave-valor se colocan en una matriz de entrada en la parte inferior.
Al realizar una consulta, la ubicación correspondiente al valor se encuentra en función del valor del código hash del valor de la clave. Si el valor de la misma clave se asigna varias veces, el valor asignado posteriormente anulará el valor asignado antes.
3. Resume algunas características del mapa
La colección Map es una colección de dos columnas y un elemento contiene dos valores (una clave y un valor).
Los tipos de datos de la clave y el valor de los elementos de la colección de mapas pueden ser iguales o diferentes.
Para los elementos de la colección Map, no se permite que la clave se repita y el valor se puede repetir.
Los elementos de la colección Map tienen una correspondencia de uno a uno entre clave y valor.
4. Clase de implementación del mapa
Aquí hay algunas clases de implementación más comúnmente utilizadas para explicar
4.1 HashMap
Esta es una clase de implementación que usamos más a diario. Su implementación subyacente es matriz + lista vinculada, y tanto los valores clave como los valores pueden ser nulos. El tamaño de memoria inicial es 16, y el elemento de almacenamiento general se expande cuando alcanza la mitad del tamaño. . El subproceso no es seguro, pero la ventaja es que es más eficiente. HashMap no admite la sincronización, es decir, la escritura de varios subprocesos al mismo tiempo puede causar incoherencia de datos. Si necesita admitir la sincronización, puede utilizar el método de colecciones sincronizado.
4.2 Hashtable
Su implementación subyacente es matriz + lista vinculada, y la clave y el valor no pueden almacenar nulos. Debido a que la mayoría de las operaciones están bloqueadas, Hashtable admite operaciones síncronas, pero es precisamente esto lo que conduce a la velocidad de escritura de Hashtable Más lento, se usa cuando el nivel de seguridad de los datos es alto.
4.3 ConcurrentHashMap
Su implementación subyacente es una matriz segmentada + lista vinculada. La sincronización de Hashtable es para toda la tabla Hash, es decir, cada vez que se bloquea toda la tabla para permitir que el hilo monopolice. ConcurrentHashMap permite que se realicen múltiples operaciones de modificación al mismo tiempo. La clave es usar la separación de bloqueo La tecnología puede proporcionar la misma seguridad de subprocesos al dividir todo el mapa en N segmentos, pero la eficiencia aumenta N veces y el valor predeterminado aumenta 16 veces.
4.4 LinkedHashMap
LinkedHashMap puede ser considerado como una combinación de HashMap y LinkedList, es decir, utiliza HashMap para manipular la estructura de datos y LinkedList para mantener el orden de inserción de elementos. Mantiene una lista doblemente enlazada internamente. LinkedHashMap es una subclase de HashMap. Sus elementos están ordenados en el orden de inserción. La velocidad transversal es más lenta.
4.5 Mapa de árbol
La implementación de NavigableMap se basa en el árbol Rojo-Negro. El mapeo se ordena según el orden natural de sus claves, o según el Comparador proporcionado cuando se crea el mapeo. Depende del método de construcción utilizado. La ventaja es que el valor de la clave puede ser ordenado, único, el valor está ordenado y repetible, y la estructura de datos subyacente es un árbol binario balanceado.
5. Métodos comunes en la interfaz del mapa
public V put (clave K, valor V): agregue la clave especificada y el valor especificado a la colección de mapas.
public V remove (clave de objeto): elimina el elemento de par clave-valor correspondiente a la clave especificada de la colección Map y devuelve el valor del elemento eliminado.
public V get (clave de objeto): obtiene el valor correspondiente en la colección de mapas de acuerdo con la clave especificada.
boolean containsKey (clave de objeto): determina si el conjunto contiene la clave especificada.
public SetkeySet (): Obtiene todas las claves de la colección de mapas y las almacena en la colección de conjuntos.
public SetkeySet (): Obtiene todas las claves de la colección de mapas y las almacena en la colección de conjuntos.
6, recorrido del mapa
Aquí hay varias formas de recorrer algunas colecciones de mapas
6.1 Implementación usando Entry
Use Entry en el bucle for para implementar el recorrido del mapa
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
for(Map.Entry<String, String> entry : map.entrySet()){
String mapKey = entry.getKey();
String mapValue = entry.getValue();
System.out.println(mapKey+":"+mapValue);
}
resultado de la operación:
6.2 Obtener clave o valores a través de Entry
Iterar claves o valores en un bucle for generalmente es adecuado para usar cuando solo se necesitan las claves o valores en el mapa, y tiene un mejor rendimiento que usar entrySet
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
//key
for(String key : map.keySet()){
System.out.println(key);
}
//value
for(String value : map.values()){
System.out.println(value);
}
resultado de la operación:
6.3 Atravesar el iterador
Map<String,String> map = new HashMap<>();
map.put("大白", "白色");
map.put("柯基", "黄色");
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Entry<String, String> entry = entries.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
resultado de la operación:
6.4 Recorrido por hallazgo clave
A través del recorrido del valor de búsqueda de claves, la eficiencia de este método es relativamente baja, porque es una operación que requiere mucho tiempo obtener el valor de la clave.
Map <String, String> map = new HashMap <> ();
map.put("大白", "白色");
map.put("柯基", "黄色");
for(String key : map.keySet()){
String value = map.get(key);
System.out.println(key+":"+value);
}
resultado de la operación:
resumen
Bueno, lo anterior es mi propio resumen de algunos conocimientos sobre mapas y la implementación de código de las cuatro formas de recorrido de mapas. Bienvenidos a todos para dar sugerencias, aprender y progresar juntos, ¡gracias!