Descripción general de las colecciones de Java
Una colección puede verse como un contenedor para almacenar información de objetos. Todas las clases de colección están en el paquete java.util, pero las clases de colección que admiten subprocesos múltiples están en el paquete java.util.concurrent.
La clase de colección de Java se deriva principalmente de dos interfaces raíz, a saber, Collection y Map.
Las clases de colección en Java se pueden dividir en dos categorías: una es para implementar la interfaz de colección ; la otra es para implementar la interfaz de mapa
Collection es una interfaz de colección básica, que puede acomodar un conjunto de elementos de colección (Elemento).
El mapa no hereda la interfaz de la colección y está en una relación paralela con la colección. Map proporciona una asignación de clave a valor. Un mapa no puede contener la misma clave y cada clave solo puede asignarse a un valor.
1. Colección
1. Subinterfaces y clases de implementación de la interfaz Collection
Las subinterfaces de la interfaz de colección incluyen: interfaz de configuración e interfaz de lista
Las clases de implementación de la interfaz Set incluyen principalmente: HashSet , TreeSet , LinkedHashSet , etc.
Las clases de implementación de la interfaz List incluyen principalmente: ArrayList , LinkedList , Stack , Vector , etc.
List expresa una colección ordenada.Cada elemento en List tiene un índice.Usando esta interfaz se puede controlar con precisión la posición de inserción de cada elemento. Los usuarios también pueden usar el índice para acceder a los elementos de la Lista, que es similar a la matriz de Java.
La característica de la interfaz Set es que no puede contener elementos duplicados. Para dos elementos cualesquiera elemento1 y elemento2 en Conjunto, elementol.equals(elemento2) = falso. Además, Set tiene como máximo un elemento nulo. Esta interfaz imita el concepto matemático de conjuntos.
La capa inferior de ArrayList es una matriz
La capa inferior de LinkedList es una lista doblemente enlazada
La capa inferior de LinkedHashSet es LinkedHashMap
La capa inferior de HashSet es HashMap
La capa inferior de TreeSet es TreeMap
Si los elementos de almacenamiento están ordenados | Si el elemento de almacenamiento es repetible | |
---|---|---|
lista (lista) | ordenado | repetible |
Cola | ordenado | repetible |
conjunto (conjunto) | fuera de servicio | no repetible |
La colección es una colección de una sola columna : cada elemento es un individuo separado
La siguiente figura se cita del nodo de poder - Sr. Du
1. Colección de listas
(1) Lista de matriz
La estructura de datos subyacente es una matriz;
Consulta rápida, adición y eliminación lentas
Hilo inseguro, alta eficiencia.
(2) Lista enlazada
La estructura de datos subyacente es una lista enlazada
La consulta es lenta, y la adición y eliminación son rápidas.
Hilo inseguro, alta eficiencia.
(3) Vectores
La estructura de datos subyacente es una matriz,
Consulta rápida, adición y eliminación lentas.
Hilo seguro, baja eficiencia.
(4) Pila
Es la clase de implementación de Vector, que implementa una pila de último en entrar, primero en salir.
Stack proporciona cinco métodos adicionales que permiten usar Vector como una pila. Los métodos push y pop, así como el método peek obtienen los elementos de la pila, el método vacío comprueba si la pila está vacía y el método de búsqueda comprueba la posición de un elemento en la pila. Una pila es una pila vacía inmediatamente después de su creación.
2. Recolección de colas
Una cola es una tabla lineal especial que solo permite eliminaciones en el extremo frontal de la tabla e inserciones en el extremo posterior de la tabla.
La clase Deque es la clase de implementación de Queue. La clase LinkedList implementa tanto la interfaz List como la interfaz Deque (también implementa la interfaz Queue). La interfaz Queue restringe el acceso a los métodos LinkedList, es decir, si el tipo de parámetro en el método es Queue, solo puede acceder a los métodos definidos por la interfaz Queue, pero no puede acceder directamente a los métodos que no son Queue de LinkedList. para que sólo se pueda utilizar el método apropiado.
3. Establecer colección
(1) clase HashSet
La estructura de datos subyacente es una tabla hash.
El rendimiento de acceso y búsqueda es bueno.
El valor del elemento de colección puede ser nulo
(2) conjunto de hash vinculado
Es una subclase de HashSet y tiene las características de HashSet.
La estructura de datos subyacente es una lista vinculada y una tabla hash. La lista vinculada mantiene el orden de los elementos, y el orden de los elementos es coherente con el orden en que se agregaron. La unicidad de los elementos está garantizada por la tabla hash.
(3) Conjunto de árboles
La estructura de datos subyacente es un árbol binario, que es la clase de implementación de la interfaz SortedSet, que puede garantizar que los elementos estén ordenados.
TreeSet admite dos tipos de clasificación de elementos: clasificación natural y clasificación de objetos personalizados.
2. Mapa
Las clases de implementación de la interfaz Map incluyen principalmente: HashMap, TreeMap , Hashtable , ConcurrentHashMap y Properties, etc.
La interfaz Map utiliza el método de almacenamiento Map<k,v> de par clave-valor para almacenar datos con una relación de mapeo. Por lo tanto, la colección Map almacena dos
Valor de grupo, se usa un grupo de valores para guardar la clave en el Mapa, y otro grupo de valores se usa para guardar el valor en el Mapa, la clave y el valor pueden ser
Es cualquier tipo de dato, el valor de la clave no permite la duplicación y puede ser nulo. Si ya hay duplicados en el Mapa al agregar pares clave-valor
clave, el valor recién agregado sobrescribirá el valor correspondiente original
El principio subyacente de HashMap es el mismo que el de HashTable. Después de la versión de Java 8 , si la colisión de hash en la misma posición es mayor que 8 , la lista enlazada se convierte en un árbol rojo-negro.
La capa inferior de HashTable es una tabla hash compuesta por el método de dirección de cadena (es decir, matriz + lista vinculada de un solo elemento)
La capa inferior de LinkedHashMap se modifica de HashMap, que contiene una lista doblemente enlazada que mantiene el orden de inserción.
La capa inferior de TreeMap es un árbol rojo-negro
El mapa es una colección de dos columnas : cada elemento es un par de datos, y el par de datos se trata como un todo para operar
La siguiente figura se cita del nodo de poder - Sr. Du
1, tabla hash, mapa hash
HashMap y HashTable son dos implementaciones típicas de la interfaz Map, y la relación entre ellas es completamente similar a ArrayList y Vertor. HashTable es una antigua clase de implementación de Map. Los métodos que proporciona son engorrosos y básicamente no se utilizan en la actualidad.
El subproceso HashMap no es seguro, el subproceso HashTable es seguro.
HashMap suele ser más rápido que HashTable
La clave y el valor de HashMap pueden ser valores nulos. HashTable no permite que se utilicen valores nulos como clave y valor. Si se coloca nulo en HashTable, se producirá una excepción de puntero nulo.
2. Clase LinkedHashMap
LinkedHashMap utiliza una lista doblemente enlazada para mantener el orden de los pares clave-valor (de hecho, solo se debe considerar el orden de las claves). La lista enlazada es responsable de mantener el orden de iteración del Mapa, que es consistente con la inserción. orden, por lo que el rendimiento es menor que el de HashMap, pero el acceso iterativo a los elementos en el Mapa Todos los elementos tienen un mejor rendimiento.
3. Clase de propiedades
La clase Propiedades es una subclase de la clase Hashtable, que es equivalente a un Mapa cuya clave y valor son ambos tipos de Cadena, y se usa principalmente para leer archivos de configuración.
4. clase TreeMap
TreeMap es la clase de implementación de SortedMap, que es una estructura de datos de árbol binario, y cada par clave-valor se usa como un nodo del árbol binario. Cuando TreeMap almacena pares clave-valor, necesita ordenar los nodos según la clave. TreeMap también tiene dos métodos de clasificación:
Clasificación natural: todas las claves del TreeMap deben implementar la interfaz Comparable, y todas las claves deben ser objetos de la misma clase; de lo contrario, se lanzará una ClassCastException.
Clasificación personalizada de objetos personalizados: al crear un TreeMap, se pasa un objeto Comparator, que es responsable de clasificar todas las claves en el TreeMap.