Java -- colección (interfaz de mapa e interfaz de colección)

1. Colecciones comunes

La interfaz del mapa y la interfaz de la colección son las interfaces principales de todos los marcos de la colección.

1. La interfaz de colección es la interfaz raíz de la clase de colección.

No existe una clase de implementación directa para esta interfaz en Java, pero se hereda para generar dos interfaces, a saber, Set y List

El conjunto  no puede contener elementos duplicados

Lista  es una colección ordenada que puede contener elementos repetidos y proporciona acceso por índice

2. Map es otra interfaz en el paquete Java.util

La interfaz de mapa y la interfaz de colección no tienen nada que ver entre sí, son independientes entre sí, pero todas son parte de la clase de colección.

El mapa contiene pares clave-valor. El mapa no puede contener claves duplicadas, pero puede contener el mismo valor

3, Iterador

Todas las clases de colección implementan la interfaz Iterator, que es una interfaz para atravesar los elementos de la colección, que incluye principalmente los siguientes tres métodos:

(1) Si hasNext() tiene el siguiente elemento

(2) next() devuelve el siguiente elemento

(3) remove() elimina el elemento actual

1. 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 y Vector, etc.
2. Las clases de implementación de la interfaz Map incluyen principalmente: HashMap, TreeMap, Hashtable, ConcurrentHashMap y
Properties

, etc.

Dos, Mapa, Lista, Establecer interfaz e introducción de clase

1. Lista (ordenada, repetible)

Los objetos almacenados en la Lista son ordenados y repetibles.La Lista se centra en el índice y tiene una serie de métodos relacionados con el índice, por lo que la velocidad de consulta es rápida. Porque al insertar o eliminar datos en la colección de listas, estará acompañado por el movimiento de datos posteriores, por lo que la velocidad de inserción y eliminación de datos es lenta.

2. Conjunto (sin ordenar, no se puede repetir)

Los objetos almacenados en el Conjunto no están ordenados y no se pueden repetir. Los objetos del conjunto no se ordenan de una manera específica, sino que simplemente se agregan al conjunto.

3. Mapa (par clave-valor, clave única, valor no único)

La colección Map almacena pares clave-valor, la clave no se puede repetir y el valor se puede repetir. Obtenga el valor de acuerdo con la clave. Al atravesar la colección de mapas, primero obtenga la colección establecida de la clave y luego recorra la colección establecida para obtener el valor correspondiente.

La comparación es la siguiente:

 

3. La implementación subyacente de colecciones comunes 

La capa inferior de ArrayList es una matriz. 

La capa inferior de LinkedList es una lista doblemente enlazada. 

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 ubicación es mayor que 8, la lista enlazada 

en un árbol rojo-negro. 

La capa inferior de HashTable es una tabla hash compuesta por un método de dirección de cadena (es decir, matriz + lista vinculada de un solo elemento). 

La capa inferior de HashSet es HashMap. 

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. 

La capa inferior de LinkedHashSet es LinkedHashMap. 

La capa inferior de TreeSet es TreeMap. 

4. La diferencia entre HashMap y HashTable

HashMap no considera la sincronización y no es seguro para subprocesos; Hashtable usa la palabra clave sincronizada y es seguro para subprocesos

HashMap permite que ambos K/V sean nulos; el último K/V no permite que sean nulos

5. La diferencia entre ConcurrentHashMap y Hashtable

ConcurrentHashMap combina las ventajas de HashMap y HashTable. HashMap no considera lo mismo 

En el primer paso, HashTable considera el problema de sincronización. Pero HashTable bloquea toda la estructura cada vez que se ejecuta de forma síncrona. 

La forma en que ConcurrentHashMap se bloquea es un poco más fina

6. Principio de implementación de ConcurrentHashMap 

JDK1.7: [Matriz (Segmento) + Matriz (HashEntry) + Lista enlazada (nodo HashEntry)] 

ConcurrentHashMap (bloqueo de segmentación) divide toda la matriz de cubos en segmentos (segmento), y cada bloqueo solo bloquea 

Parte de los datos en el contenedor, acceso de subprocesos múltiples a datos en diferentes segmentos de datos en el contenedor, no habrá competencia de bloqueo, mejorando el acceso concurrente 

Preguntar tarifa. 

El segmento es un bloqueo reentrante ReentrantLock, que desempeña el papel de bloqueo en ConcurrentHashMap. 

HashEntry se utiliza para almacenar datos de pares clave-valor. 

JDK1.8: Matriz de nodos + lista enlazada / árbol rojo-negro 

CAS+Synchronized se usa para garantizar la seguridad de las actualizaciones simultáneas, y la capa inferior todavía usa la estructura de almacenamiento de matriz+lista enlazada+árbol rojo-negro 

estructura

Siete, la diferencia entre ArrayList y Vector 

Vector es seguro para subprocesos, ArrayList no es seguro para subprocesos. 

Vector crece al doble del tamaño original cuando los datos están llenos y ArrayList crece a la capacidad original cuando el volumen de datos alcanza la mitad de la capacidad. 

1,5 veces. 

Ocho, la diferencia entre ArrayList y LinkedList

LinkedList se basa en la estructura de datos de lista enlazada; ArrayList se basa en la estructura de datos de matriz dinámica 

LinkedList es más eficiente para insertar y eliminar datos, y ArrayList es más eficiente para consultar

9. ¿ Cuál es la longitud de inicialización predeterminada de HashMap?

La longitud predeterminada en JDK es 16, y tanto la longitud predeterminada como la longitud expandida deben ser una potencia de 2

10. Marco de colección de Java

Hay colecciones en todos los lenguajes de programación y la versión inicial de Java contiene varias clases de colección: Vector, Stack, HashTable y 

Formación. Con el uso generalizado de colecciones, Java 1.2 propuso un marco de colección que incluye todas las interfaces, implementaciones y algoritmos de colección. existir 

El uso de clases de colección genéricas y concurrentes mientras se garantiza la seguridad de subprocesos se ha experimentado en Java durante mucho tiempo. También se incluye en el paquete de concurrencia de Java. 

, interfaces de bloqueo y sus implementaciones. Algunas de las ventajas del marco de colección son las siguientes: 

(1) Usar clases de colección principales para reducir los costos de desarrollo en lugar de implementar nuestras propias clases de colección. 

(2) La calidad del código mejora con el uso de clases de marco de colección rigurosamente probadas. 

(3) Al usar las clases de colección que vienen con el JDK, se puede reducir el costo de mantenimiento del código. 

(4) Reutilización y operatividad. 

11. Genéricos en el marco de la colección

Java 1.5 introdujo genéricos, y todas las interfaces e implementaciones de colección lo utilizan ampliamente. Los genéricos nos permiten proporcionar colecciones con una 

para contener el tipo de objeto, por lo que si agrega elementos de otros tipos, informará un error en el momento de la compilación. Esto evita la necesidad de 

Se produce una ClassCastException en tiempo de ejecución, porque obtendrá un mensaje de error en tiempo de compilación. Los genéricos también hacen que el código sea más 

Limpio, no necesitamos usar la conversión explícita y el operador instanceOf. También tiene beneficios en tiempo de ejecución, ya que no se generan clases 

instrucciones de código de bytes con verificación de tipo

12. La colección no hereda de las interfaces Clonable y Serializable 

La interfaz Collection especifica un conjunto de objetos, siendo los objetos sus elementos. Cómo mantener estos elementos mediante la implementación específica de Collection 

Decide ahora. Por ejemplo, algunas implementaciones de Collection, como List, permiten elementos duplicados, mientras que otras, como Set, no. mucho 

Las implementaciones de colección tienen un método de clonación público. Sin embargo, no tiene sentido ponerlo en todas las implementaciones de colecciones. 

de. Esto se debe a que Collection es una representación abstracta. Lo que importa es la implementación. 

La semántica y el significado de clonación o serialización entran en juego cuando se trata de implementaciones concretas. Por lo tanto, la implementación específica debe determinar 

determina cómo se clona o serializa, o si se puede clonar o serializar. 

Autorice la clonación y la serialización en todas las implementaciones, lo que en última instancia genera menos flexibilidad y más restricciones. Una implementación particular debe decidir 

Determina si se puede clonar y serializar.

Trece, la interfaz Mapa no hereda la interfaz Colección

Aunque la interfaz del Mapa y su implementación son parte del marco de las colecciones, un Mapa no es una colección y una colección no es un Mapa. por lo tanto, 

No tiene sentido que Map herede Collection y viceversa. 

Si Map hereda la interfaz Collection, ¿a dónde van los elementos? El mapa contiene pares clave-valor, que proporcionan la clave de extracción o 

método para una colección de listas de valores, pero no se ajusta a la especificación de "conjunto de objetos". 

14. Iterador

La interfaz Iterator proporciona una interfaz para atravesar cualquier colección. Podemos usar el método iterador de una colección. 

para obtener una instancia de iterador. Los iteradores reemplazan la enumeración en el marco de las colecciones de Java. Los iteradores permiten que la persona que llama itere 

Eliminar elementos durante la generación

15. La diferencia entre las interfaces de enumeración e iterador

La enumeración es dos veces más rápida que Iterator y también usa menos memoria. La enumeración es muy básica, 

También cubre las necesidades básicas. Sin embargo, Iterator es más seguro que Enumeration porque cuando una colección es 

Mientras se recorre, evita que otros subprocesos modifiquen la colección. 

Los iteradores reemplazan la enumeración en el marco de las colecciones de Java. Los iteradores permiten a la persona que llama eliminar elementos de la colección, mientras que 

La enumeración no puede hacerlo. El nombre del método iterador se ha mejorado para que su función sea más clara.

Dieciséis, la diferencia entre Iterator y ListIterator

(1) Podemos usar Iterator para recorrer colecciones Set y List, mientras que ListIterator solo puede recorrer List. 

(2) Iterator solo puede atravesar hacia adelante, mientras que LIstIterator puede atravesar bidireccionalmente. 

(3) ListIterator hereda de la interfaz Iterator y luego agrega algunas funciones adicionales, como agregar un elemento, reemplazar 

Cambiar un elemento, obtener la posición de índice del elemento anterior o siguiente

Métodos Seventeen, hashCode() y equals()

HashMap utiliza los métodos hashCode() y equals() del objeto Key para determinar el índice del par clave-valor. cuando lo intentamos 

Estos métodos también se utilizarán al obtener valores de HashMap. Si estos métodos no se implementan correctamente, el 

En este caso, dos claves diferentes pueden producir la misma salida hashCode() y equals(), y HashMap reconocerá 

porque son iguales, y luego sobrescribirlos en lugar de almacenarlos en diferentes lugares. Del mismo modo, todos los duplicados almacenados no están permitidos. 

Las clases de colección de datos complejos usan hashCode() y equals() para encontrar duplicados, por lo que es muy importante implementarlos correctamente. 

La implementación de equals() y hashCode() debe seguir las siguientes reglas: 

(1) Si o1.equals(o2), entonces o1.hashCode() == o2.hashCode() siempre es verdadero. 

(2) Si o1.hashCode() == o2.hashCode(), no significa que o1.equals(o2) sea verdadero. 

18. ¿Se puede utilizar cualquier clase como clave del Mapa ?

Podemos usar cualquier clase como clave del Mapa, pero antes de usarlas, debemos considerar los siguientes puntos: 

(1) Si una clase anula el método equals(), también debería anular el método hashCode(). 

(2) Todas las instancias de la clase deben seguir las reglas relacionadas con equals() y hashCode(). Por favor refiérase a estos mencionados anteriormente 

pero. 

(3) Si una clase no usa equals(), no debe usarlo en hashCode(). 

(4) La mejor práctica para las clases clave definidas por el usuario es hacerlas inmutables, de modo que el valor hashCode() se pueda almacenar en caché. 

Ven y ten un mejor rendimiento. Las clases inmutables también aseguran que hashCode() y equals() no cambien en el futuro, de modo que 

resolverá el problema relacionado con la variable

Diecinueve, elija HashMap o TreeMap

Para operaciones como insertar, eliminar y ubicar elementos en el Mapa, HashMap es la mejor opción. Sin embargo, si necesita 

Para recorrer un conjunto ordenado de claves, TreeMap es una mejor opción. Según el tamaño de su colección, tal vez 

Agregar elementos a HashMap será más rápido, reemplace el mapa con TreeMap para el recorrido clave ordenado

20. ¿Qué clases de colección proporcionan acceso aleatorio a los elementos? 

Las clases ArrayList, HashMap, TreeMap y HashTable proporcionan acceso aleatorio a los elementos

21. Diferencia entre cola y pila

Tanto las pilas como las colas se utilizan para prealmacenar datos. java.util.Queue es una interfaz y su clase de implementación está empaquetada en Java 

medio. Las colas permiten la recuperación de elementos primero en entrar, primero en salir (FIFO), pero no siempre. La interfaz de Deque permite la recuperación de elementos de ambos extremos 

blanco. 

Una pila es similar a una cola, pero permite la recuperación de elementos de último en entrar, primero en salir (LIFO). 

Stack es una clase que se extiende desde Vector y Queue es una interfaz

Veintidós, clase de colecciones

java.util.Collections es una clase de utilidad que contiene solo métodos estáticos que manipulan o devuelven colecciones. Contiene una colección de operaciones. 

Un algoritmo polimórfico que devuelve una nueva colección respaldada por la colección especificada y algún otro contenido. Esta clase contiene los algoritmos del marco de la colección. 

Métodos, como búsqueda binaria, clasificación, barajado e inversión, etc.

23. La diferencia entre las interfaces Comparable y Comparator

Las interfaces Comparable y Comparator se utilizan para ordenar colecciones o matrices de objetos. La interfaz comparable es 

Usado para proporcionar un ordenamiento natural de los objetos, podemos usarlo para proporcionar un ordenamiento basado en una sola lógica. 

La interfaz Comparator se usa para proporcionar diferentes algoritmos de clasificación, podemos elegir el Comparator para usar para hacer coincidir 

Ordenar una colección dada de objetos

Supongo que te gusta

Origin blog.csdn.net/MinggeQingchun/article/details/118360318
Recomendado
Clasificación