Las colecciones de Java son kits de herramientas proporcionados por Java, que contienen estructuras de datos de uso común: colecciones, listas vinculadas, colas, pilas, matrices, mapas, etc. La ubicación del kit de herramientas de recolección de Java es java.util.*
Las colecciones de Java se pueden dividir en 4 partes: lista de listas, colección establecida, mapa de mapa, clases de herramientas (iterador iterador, clase de enumeración de enumeración, matrices y colecciones).
El marco de kit de herramientas de colección Java se muestra a continuación.
Nota: Mirando el diagrama del marco anterior, primero agarre su tronco, a saber, la colección y el mapa.
La colección es una interfaz, una colección altamente abstracta, que contiene las operaciones y propiedades básicas de la colección.
La colección incluye dos ramas: lista y conjunto.
(01) La lista es una cola ordenada, y cada elemento tiene su índice. El valor de índice del primer elemento es 0.
Las clases de implementación de la lista incluyen LinkedList, ArrayList, Vector, Stack.
(02) El conjunto es una colección que no permite elementos duplicados.
Las clases de implementación establecidas incluyen HastSet y TreeSet. Hashset se basa en HashMap, que en realidad se implementa a través de HashMap; Treeset se basa en Treemap, que en realidad se implementa a través de Treemap.
MAP es una interfaz de mapeo, a saber, los pares de valor clave de valor clave. Cada elemento en el mapa contiene "una clave" y "un valor correspondiente a la clave".
AbstractMap es una clase abstracta que implementa la mayoría de las API en la interfaz del mapa. Hashmap, Treemap y Weakhashmap son todos heredados de AbstractMap.
Aunque el hashtable hereda del diccionario, implementa la interfaz del mapa.
A continuación, veamos a Iterator. Es una herramienta para atravesar colecciones, es decir, generalmente atravesamos las colecciones a través del iterador iterador. Decimos que la colección depende del iterador porque las clases de implementación de la colección deben implementar la función Iterator () y devolver un objeto Iterator.
ListIterator existe específicamente para atravesar la lista.
Veamos nuevamente la enumeración, es una clase abstracta presentada por JDK 1.0. Al igual que Iterator, también está atravesando una colección; Pero la enumeración tiene menos funciones que el iterador. En el diagrama de bloques anterior, la enumeración solo se puede usar en hashtable, vector, pila.
Finalmente, mira matrices y colecciones. Son dos clases de herramientas que operan matrices y colecciones.
Con el marco general anterior, analizaremos cada clase por separado.
Arquitectura de recolección
A continuación, resumiremos la colección. Echemos un vistazo a los diagramas de relaciones de algunas clases de marco en la colección:
La colección es una interfaz, y sus dos ramas principales son: lista y set.
La lista y el conjunto son interfaces, y heredan de la colección. La lista es una cola ordenada, y puede haber elementos repetidos en la lista; Si bien SET es una colección en conceptos matemáticos, ¡y no hay elementos repetidos en el set!
List and Set tiene sus propias clases de implementación.
Para una fácil implementación, la clase AbstractCollection Abstract se define en la colección, lo que implementa la mayoría de las funciones en la colección; De esta manera, en la clase de implementación de la colección, podemos guardar la codificación duplicada heredando AbstractCollection. AbstractList y AbstractSet se heredan de AbstractCollection, la clase de implementación de lista específica hereda de AbstractList y la clase de implementación establecida hereda de AbstractSet.
Además, hay una función iterator () en la colección, que se utiliza para devolver una interfaz iteradora. Por lo general, atravesamos la colección a través del iterador iterador. ListIterator es exclusivo de la interfaz de la lista. En la interfaz de la lista, se devuelve un objeto ListIterator a través de ListIterator ().
A continuación, echemos un vistazo a la introducción de cada interfaz y clase abstracta; Luego, tendremos una comprensión detallada de la clase de implementación.
1. Introducción a la colección
La definición de colección es la siguiente:
La colección de interfaz pública <E> se extiende iterable <e> {} Es una interfaz, una colección altamente abstracta, que contiene las operaciones básicas de la colección: agregar, eliminar, compensar, recorrer (leer), ya sea vacío, obtener el tamaño, ya sea que esté protegido por cierto elemento, etc.
Todas las subclases de la interfaz de colección (subclase directo y subclase indirecta) deben implementar dos constructores: constructores sin parámetros y constructores con la colección de parámetros. Se puede usar un constructor con parámetros para convertir el tipo de colección.
// colección apiAbstract boolean add (e object) abstract boolean addall (colección <? Extends e> colección) abstract void clear () abstract boolean contiene (objeto objeto) abstracto boolean contensall (colección <?> Colección) abstracto boolean iguales (objeto objeto) intsehcode () abstracto boolean isEtimty () abstracto iterator <e> iterator () abstracto boolean eliminación (eliminación de objeto (objeto) removeAll (colección <?> colección) abstracto boolean retainall (colección <?> colección) abstract int size () abstract <t> t [] toArray (t [] array) objeto abstracto [] toArray ()
2. Introducción a la lista
La definición de lista es la siguiente:
Lista de interfaz pública <E> extiende la colección <E> {} List es una interfaz heredada de la colección, es decir, la lista es un tipo de colección. La lista es una cola ordenada, y cada elemento en la lista tiene un índice; El valor de índice del primer elemento es 0, y el valor de índice de los elementos posteriores +1 a su vez. A diferencia de SET, se permiten elementos duplicados en la lista. La introducción oficial de la lista es la siguiente:
Una lista es una colección que mantiene un pedido para sus elementos. Cada elemento de la lista tiene un índice. Por lo tanto, se puede acceder a cada elemento mediante su índice, con el primer índice cero. Normalmente, las listas permiten elementos duplicados, en comparación con los conjuntos, donde los elementos deben ser únicos.
Sobre API. Dado que la lista hereda de la interfaz de colección, naturalmente contiene todas las interfaces funcionales de la colección; Dado que la lista es una cola ordenada, también tiene su propia interfaz API. Los principales incluyen "Agregar, eliminar, obtener y modificar elementos en la ubicación especificada", "Obtenga subquees en la lista", etc.
// colección apiAbstract boolean add (e object) abstract boolean addall (colección <? Extends e> colección) abstract void clear () abstract boolean contiene (objeto objeto) abstracto boolean contensall (colección <?> Colección) abstracto boolean iguales (objeto objeto) intsehcode () abstracto boolean isEtimty () abstracto iterator <e> iterator () abstracto boolean eliminación (eliminación de objeto (objeto) removeall (colección <?> colección) abstracto boolean retainall (colección <?> colección) abstract int size () abstract <t> t [] toArray (t [] array) objeto abstracto [] toArray () // en comparación con la colección, la nueva API de la lista: abstracto void add (int (objeto, objeto) abstracto addall (int ubicación, colección <? Extends e> colección) abstract E get (intboation intboat (intboation intugurt) LastIndexOf (Object Object) Resumen ListIterator <E> listIterator (int ubicación) Resumen listIterator <E> listIterator () Abstract e remo
3. Introducción al set
El conjunto se define de la siguiente manera:
El conjunto de interfaz pública <E> extiende la colección <E> {} SET es una interfaz heredada de la colección, es decir, SET también es un tipo de colección. El conjunto es una colección sin elementos duplicados.
Sobre API. La API de Set es exactamente la misma que la colección.
// SET apiAbstract boolean add (e objeto) abstract boolean addall (colección <? Extends e> colección) abstract void clear () abstract boolean contiene (objeto objeto) abstracto boolean contensall (colección <?> Colección) abstracto boolean iguales (objeto objeto) intsehcode () abstracto boolean isEpty () abstracto iterator <e> iterator () abstracto boolean eliminar (eliminación de objeto) removeAll (colección <?> colección) abstracto boolean retainall (colección <?> colección) abstract int size () abstract <t> t [] toArray (t [] array) objeto abstracto [] toArray ()
4. Abstract -Collection
La definición de resumen de la colección es la siguiente:
Public Abstract Class AbstractCollection <E> Implementa la colección <E> {} AbstractCollection es una clase abstracta que implementa funciones en la colección excepto iterator () y size ().
La función principal de Abstract Collection: implementa la mayoría de las funciones en la interfaz de colección. Esto facilita otras clases para implementar la recopilación, como ArrayList, LinkedList, etc. Si estas clases desean implementar la interfaz de recopilación, la mayoría de las interfaces se han implementado heredando abstract -colección.
5. Abstract List
La definición de abstractlist es la siguiente:
Public Abstract Class AbstractList <E> extiende AbstractCollection <E> Lista de implementos <E> {} AbstractList es una clase abstracta que hereda de AbstractCollection e implementa la interfaz de la lista. Implementa funciones en la lista, excepto size () y get (int ubicación).
La función principal de AbstractList: implementa la mayoría de las funciones en la interfaz de la lista. Esto facilita otras clases para heredar la lista.
Además, en comparación con AbstractCollection, la interfaz Iterator () se implementa en la clase abstracta abstracta.
6. Abstractset
La definición de AbstractSet es la siguiente: Public Abstract Class AbstractSet <E> Extiende AbstractCollection <E> Conjunto de implementos <E> {} AbstractSet es una clase abstracta que hereda de AbstractCollection e implementa la interfaz SET. Dado que la interfaz SET y la API en la interfaz de colección son exactamente las mismas, SET no tiene su propia API separada. Al igual que AbstractCollection, implementa funciones en la lista excepto Iterator () y Size ().
La función principal de AbstractSet: IT implementa la mayoría de las funciones en la interfaz SET. Esto facilita otras clases para implementar interfaces establecidas.
7. iterador
La definición de iterador es la siguiente:
Interfaz pública Iterator <E> {} Iterator es una interfaz, que es un iterador de la colección. Se puede atravesar una colección a través de los elementos de la colección a través de Iterator. La interfaz API proporcionada por el iterador incluye: si el siguiente elemento existe, obtener el siguiente elemento y eliminar el elemento actual.
Nota: Cuando el Iterator atraviesa la colección, se basa en el mecanismo de Fail-Fast. Es decir, cuando un cierto hilo A atraviesa un conjunto a través de un iterador, si el contenido del conjunto cambia por otros hilos; Luego, cuando el hilo A accede al conjunto, se lanzará una excepción concurrente de Modificación Excepción, lo que resulta en un evento de fallas. Con respecto al contenido detallado de Fail-Fast, lo explicaremos específicamente después del resumen de Fail-Fast.
// iterator apiAbsact boolean Hasnext () abstract e next () abstract void remove ()
8. Listiterator
La definición de ListIterator es la siguiente:
Interfaz pública Listiterator <E> extiende Iterator <E> {} ListIterator es una interfaz heredada de Iterator, que es un iterador de cola. Especialmente utilizado para una lista conveniente, puede proporcionar un recorrido hacia adelante/hacia atrás. En comparación con el iterador, agrega interfaces API como agregar, si el elemento anterior existe y obtener el elemento anterior.
// Listiterator's API // heredado de la interfaz de Iterator Abstract Boolean Hasnext () Abstract E Next () Abstract void remove () // Agregar interfaz API Abstract void add (E Object) Abstract Boolean Hasprevious () Abstract int NextIndex () Abstract E anterior () Resumen Anteriorindex () Abstract Void Set (E Object)