Java Colecciones Tutorial
https://programmerclick.com/article/1686718375/
Colecciones en Java-tutorial
Las colecciones en Java se utilizan en casi todas las aplicaciones. Java Collections Framework es una de las partes centrales del lenguaje de programación Java. El tutorial de Java Collections presentará en detalleJava Collections Framework。
Colecciones en Java
- ¿Qué es el Java Collections Framework?
- Interfaz de colección de Java
- Clase de colección de Java
- Clase de colección
- Empaque sincrónico
- Embalaje no modificable
- Colección segura para hilos
- Algoritmo API de colección
- Características de la API de Java 8 Collections
- Cambios de la API de colecciones de Java 10
- Cambios de la API de colecciones de Java 11
- Colecciones en cáscaras de nuez
¿Qué es el Java Collections Framework?
Una colección es como un contenedor que combina múltiples artículos en una unidad. Por ejemplo; una lata de chocolate, lista, etc. Casi todos los lenguajes de programación usan colecciones, y cuando llega Java, también viene con una pequeña clase de colección;Vector,Apilar,Tabla de picadillo,Formación. Java 1.2 proporcionaCollections Framework, Es una arquitectura que representa y manipula colecciones en Java de forma estándar. El Java Collections Framework contiene las siguientes partes:
- interfaz: La interfaz de Java Collections Framework proporciona tipos de datos abstractos que representan colecciones.
java.util.Collection
Es la interfaz raíz de Framework Framework. Está en la parte superior de la jerarquía del marco de Colecciones. Contiene algunos métodos importantes, comosize()
,iterator()
,add()
,remove()
,clear()
Cada clase de colección debe implementarse. Algunas otras interfaces importantes sonjava.util.List
,java.util.Set
,java.util.Queue
conjava.util.Map
. Map es la única interfaz que no hereda de la interfaz de Collection, pero es parte del marco de Collections. Todas las interfaces del marco de recopilación existen enjava.util
en la bolsa. - Clase de implementación: Las colecciones en Java proporcionan clases principales de implementación para colecciones. Podemos usarlos para crear diferentes tipos de colecciones en programas java. Algunas clases importantes de recolección son
ArrayList
,LinkedList
,HashMap
,TreeMap
,HashSet
,TreeSet
. Estas clases resuelven la mayoría de nuestras necesidades de programación, pero si necesitamos algunas clases de colección especiales, podemos extenderlas para crear nuestras clases de colección personalizadas.A Java 1.5 se le ocurrió la idea de permitir modificar una colección mientras se iteraba, algunas de ellas son clases de colección seguras para subprocesos
CopyOnWriteArrayList
,ConcurrentHashMap
,CopyOnWriteArraySet
. Estas clases se encuentran en el paquete java.util.concurrent. Todas las clases de colección existen enjava.util
conjava.util.concurrent
paquete. - algoritmo: Los algoritmos son métodos útiles que proporcionan algunas funciones de uso común, como buscar, ordenar y barajar.
El siguiente diagrama de clase muestra la jerarquía del marco de colecciones. Por simplicidad, solo incluyo interfaces y clases de uso común.
Ventajas de Java Collections Framework
El marco de Java Collections tiene las siguientes ventajas:
- Reduce el esfuerzo de desarrollo-Contiene casi todos los tipos comunes de colecciones y métodos útiles para iterar y manipular datos. Por lo tanto, podemos centrarnos más en la lógica empresarial en lugar de diseñar nuestra API de recopilación.
- mejora de calidad-Usar clases de colección central bien probadas puede mejorar la calidad del programa, en lugar de utilizar cualquier estructura de datos desarrollada por la familia.
- Reusabilidad e interoperabilidad
- reducir la carga de trabajo-Si usamos la clase API de la colección principal, aprenda cualquier nueva API.
Interfaz de colección de Java
La interfaz de colección de Java es la base del marco de colecciones de Java. Tenga en cuenta que todas las interfaces de colección principal son comunes; por ejemplopublic interface Collection<E>
. <E> Se utiliza la sintaxisGenéricoCuando declaramos Colección, debemos usarla para especificar el tipo de Objeto que puede contener. Ayuda a reducir los errores de tiempo de ejecución al escribir objetos de verificación en tiempo de compilación.
Para mantener manejable el número de interfaces de recopilación principales, la plataforma Java no proporciona una interfaz separada para cada variante de cada tipo de recopilación. Si se llama a una operación no admitida, la implementación de la colección arrojará unUnsupportedOperationException
。
Interfaz de la colección
Esta es la raíz de la jerarquía de colección. Una colección representa un grupo de objetos llamados sus elementos. La plataforma Java no proporciona ninguna implementación directa de esta interfaz.
La interfaz tiene métodos para decirle cuántos elementos hay en la colección (size
,isEmpty
) Para verificar si el objeto dado está en la colección (contains
), agrega y elimina elementos de la colección (add
,remove
) y proporcionar una colección de iteradores (iterator
)。
La interfaz de recopilación también proporciona un método de operación por lotes para todo el trabajo de recopilación,containsAll
,addAll
,removeAll
,。retainAll
clear
EstostoArray
Los métodos se proporcionan como un puente entre las colecciones y las API antiguas que esperan matrices de entrada.
Interfaz de iterador
La interfaz Iterator proporciona un método para iterar sobre cualquier Colección. Nosotros podemos usariterator
Método para obtener la instancia de iterador de Collection. Iterador reemplazadoEnumeration
Marco de colecciones de Java. Los iteradores permiten que la persona que llama elimine elementos de la colección subyacente durante la iteración. En la clase de colecciónIteradorLogradoPatrón de diseño de iterador。
Establecer interfaz
Set es una colección que no puede contener elementos repetidos. Esta interfaz modela abstracciones de conjuntos matemáticos y se utiliza para representar colecciones, como mazos.
La plataforma Java contiene tres implementaciones de conjuntos generales:HashSet
,TreeSet
,conLinkedHashSet
. La interfaz Set no permite el acceso aleatorio a elementos en la Colección. Puede usar iterador o bucle foreach para atravesar los elementos de Set.
Interfaz de la lista
ListEs una colección ordenada que puede contener elementos repetidos. Puede acceder a cualquier elemento desde su índice. La lista es más como una matriz con longitud dinámica. La lista es uno de los tipos de colección más utilizados.ArrayList
yLinkedList
Es la clase de implementación de la interfaz Lista.
La interfaz Lista proporciona métodos útiles para agregar elementos en un índice específico, eliminar / reemplazar elementos basados en el índice y usar el índice para obtener sublistas.
-La lista de clases de colección proporciona algunos algoritmos útiles.sort
,shuffle
,reverse
,binarySearch
Espere.
Interfaz de cola
colaSe utiliza para guardar una colección de elementos múltiples antes de procesar. Además de las operaciones básicas de recopilación, Queue también proporciona operaciones adicionales de inserción, extracción e inspección.
La cola generalmente (pero no necesariamente) clasifica los elementos de manera FIFO (primero en entrar, primero en salir). Además de la cola de prioridad, la cola de prioridad clasifica los elementos según el orden natural de los comparadores o elementos proporcionados. Independientemente del orden utilizado, el encabezado de la cola es el elemento que se elimina llamando o sondeando. En la cola FIFO, todos los elementos nuevos se insertan al final de la cola.
Interfaz Dequeue
Colección lineal, que permite la inserción y extracción de elementos en ambos extremos. El nombre deque es una abreviatura de "cola doble" y generalmente se pronuncia "deck". La mayoría de las implementaciones de Deque no tienen un límite fijo en la cantidad de elementos que pueden contener, pero esta interfaz admite deques con capacidad limitada y deques sin límite de tamaño fijo.
Esta interfaz define un método para acceder a elementos en ambos extremos de una deque. Proporciona métodos para insertar, eliminar e inspeccionar elementos.
Interfaz de mapa
Java MapEs un objeto que asigna claves a valores. El mapa no puede contener claves duplicadas: cada clave puede mapear como máximo un valor.
La plataforma Java contiene tres implementaciones de mapas generales:HashMap
,TreeMap
,conLinkedHashMap
。
La operación básica del mapa esput
,get
,containsKey
,containsValue
,size
,conisEmpty
。
Interfaz ListIterator
Los iteradores de lista permiten a los programadores recorrer la lista en cualquier dirección, modificar la lista durante la iteración y obtener la posición actual del iterador en la lista.
Java ListIteratorNo hay ningún elemento actual; su posición del cursor siempre está entre el elemento devuelto por previous () y el elemento devuelto por next ().
Interfaz SortedSet
SortedSet es un conjunto que mantiene sus elementos en orden ascendente. Se proporcionan varias operaciones adicionales para aprovechar los pedidos. Los conjuntos ordenados se utilizan para conjuntos ordenados naturalmente, como listas de palabras y volúmenes de membresía.
Interfaz SortedMap
Mantener sus asignaciones en orden de teclas ascendente. Esta es una simulación de mapa de SortedSet. Los mapas de clasificación se utilizan para conjuntos ordenados naturalmente de pares clave / valor, como diccionarios y directorios telefónicos.
Clase de colección de Java
El marco de Java Collections viene con muchas clases de implementación de interfaz. La implementación más común esArrayList,HashMapY HashSet. Java 1.5 incluye implementaciones concurrentes; como ConcurrentHashMap y CopyOnWriteArrayList. En general, las clases de Colección no son seguras para subprocesos y sus iteradores fallan rápidamente. En esta sección, aprenderemos sobre las clases de colección de uso común.
Clase HashSet
Java HashSetPorHashMapImplementación básica de la interfaz Set compatible. No garantiza el orden de iteración de la colección y permitenullelemento.
Esta clase proporciona un rendimiento de tiempo fijo para operaciones básicas (add
,remove
,contains
consize
), suponiendo que la función hash dispersará los elementos correctos en el depósito. Podemos establecer la capacidad inicial y el factor de carga para este conjunto. El factor de carga es una medida de cuán completo se permite que esté el mapa hash antes de que su capacidad se aumente automáticamente.
Clase TreeSet
NavigableSet
Implementación basada en unTreeMap
. Los elementos se ordenan en su orden natural o segúnComparator
Se proporciona el tiempo de creación del conjunto, dependiendo del constructor utilizado.
referencia:Java Comparable Comparator
Esta implementación proporciona un costo de tiempo de registro (n) garantizado para operaciones básicas (adición, eliminación e inclusión).
Tenga en cuenta que si la interfaz Set se implementa correctamente, el orden mantenido por el conjunto (se proporcione o no un comparador explícito) debe ser coherente con iguales. (Para obtener definiciones precisas consistentes con iguales, consulte Comparable o Comparador). Esto se debe a que la interfaz Establecer se define de acuerdo con la operación de igualdad, pero la instancia de TreeSet usa el método compareTo (o compare) para realizar todas las comparaciones de elementos, por lo tanto, desde la perspectiva de la colección , Los elementos que se consideran iguales de esta manera son iguales.
Clase ArrayList
Java ArrayListEs una implementación de matriz redimensionable de la interfaz List. Implemente todas las operaciones de lista opcionales y permita todos los elementos, incluido nulo. Además de implementar la interfaz de Lista, esta clase también proporciona métodos para manipular el tamaño de la matriz utilizada internamente para almacenar la lista. (Esta clase es aproximadamente equivalente a Vector, excepto que no está sincronizada).
Las operaciones size, isEmpty, get, set, iterator y listIterator se ejecutan en un tiempo constante. La operación de suma se ejecuta en tiempo constante amortizado, es decir, agregar n elementos toma O (n) tiempo. Todas las demás operaciones se ejecutan en tiempo lineal (aproximadamente). En comparación con la implementación de LinkedList, el factor constante es menor.
Otras lecturas:Java ArrayList e Iterator
Clase LinkedList
La lista y la interfaz Deque implementan una lista doblemente vinculada. Implemente todas las operaciones de lista opcionales y permita todos los elementos (incluido nulo).
Para listas doblemente vinculadas, se pueden esperar todas las operaciones. La operación de indexación en la lista recorrerá la lista desde el principio o el final, lo que esté más cerca del índice especificado.
Clase HashMap
Implementación de la interfaz Map basada en la tabla hash. Esta implementación proporciona todas las operaciones de mapeo opcionales y permite valores nulos y claves nulas. La clase HashMap es más o menos equivalente a Hashtable, excepto que es asíncrona y permite valores nulos. Esta clase no garantiza el orden del mapa.
Esta implementación es una operación básica (get
conput
) Proporciona un rendimiento de tiempo constante. Proporciona un constructor para establecer la capacidad inicial y el factor de carga de la colección.
Otras lecturas:HashMap vs ConcurrentHashMap
Clase TreeMap
Implementación de NavigableMap basado en árbol rojo-negro. El mapa se ordena según el orden natural de sus claves o según el comparador proporcionado por el constructor utilizado cuando se creó el mapa.
Esta implementación proporciona un costo de tiempo de registro (n) garantizado para las operaciones KeyKey, get, put y remove. El algoritmo es una adaptación del algoritmo en la introducción a los algoritmos de Cormen, Leiserson y Rivest.
Tenga en cuenta que si este mapa ordenado implementa la interfaz de Mapa correctamente, el orden mantenido por TreeMap (como cualquier mapa ordenado y si se proporciona un comparador explícito) debe ser coherente con iguales. (Para la definición exacta consistente con iguales, vea Comparable o Comparador.) Esto se debe a que la interfaz de Mapa se define de acuerdo con la operación de igualdad, pero los mapas ordenados usan el método compareTo (o compare) para realizar todas las comparaciones clave, por lo que desde la perspectiva de la clasificación de mapas Mira, las teclas que se consideran iguales por este método son iguales. Incluso si el orden es inconsistente con iguales, el comportamiento del mapeo ordenado puede estar bien definido. Simplemente no cumple con el contrato general de la interfaz de Map.
Clase PriorityQueue
La cola procesa sus elementos en orden FIFO, pero a veces queremos procesar elementos de acuerdo con la prioridad. En este caso, podemos usar PriorityQueue, debemos proporcionar la implementación del Comparador al crear instancias de PriorityQueue. PriorityQueue no permite valores nulos y es ilimitado. Para obtener información más detallada sobre esto, vaya aJava Priority Queue, Puede usar el programa de muestra para verificar su uso.
Clase de colección
Clase Java Collections solamenteContiene métodos estáticos que operan en colecciones o colecciones de devolución. Contiene un algoritmo polimórfico que opera en la colección, un "contenedor", que devuelve una nueva colección compatible con la colección especificada, y algunos otros resultados posibles.
Esta clase contiene métodos para algoritmos de marco de recopilación, comoBúsqueda binaria, Ordenar, reorganizar, invertir, etc.
Empaque sincrónico
El contenedor de sincronización agrega sincronización automática (seguridad de subprocesos) a cualquier colección. Cada una de las seis interfaces principales de colección (Colección, Conjunto, Lista, Mapa, SortedSet y SortedMap) tiene un método de fábrica estático.
Cada uno de estos métodos devuelve una Colección sincronizada (segura para subprocesos) respaldada por la colección especificada.
Embalaje no modificable
El contenedor no modificable elimina la capacidad de modificar la colección interceptando todas las operaciones que modificarán la colección y la arrojarán.UnsupportedOperationException
. Su objetivo principal es;
- Haz la colección después de construirlaInmutable. En este caso, es mejor no mantener referencias a colecciones de soporte. Esto garantiza absolutamente la inmutabilidad.
- Permitir que ciertos clientes accedan a su estructura de datos en modo de solo lectura. Conserva la referencia a la colección de soporte, pero distribuye la referencia al contenedor. De esta manera, los clientes pueden ver pero no modificar, mientras mantienen el acceso completo.
Estos métodos son;
Colección segura para hilos
Java 1.5 Concurrent package(java.util.concurrent
) Contiene clases de colección seguras para subprocesos que permiten modificar la colección durante la iteración. Al diseñar el iterador, falla rápidamente y genera ConcurrentModificationException. Algunas clases sonCopyOnWriteArrayList
,ConcurrentHashMap
,CopyOnWriteArraySet
。
Lea estas publicaciones para obtener más información sobre ellas.
- Evitar excepción de modificación concurrente
- Ejemplo de CopyOnWriteArrayList
- HashMap y ConcurrentHashMap
Algoritmo API de colección
Java Collections Framework proporciona implementaciones de algoritmos comunes, como ordenar y buscar. La clase Collections contiene estas implementaciones de métodos. La mayoría de estos algoritmos funcionan en Lista, pero algunos de ellos son aplicables a varias colecciones.
Ordenar
El algoritmo de ordenación reordena la Lista de modo que sus elementos estén organizados en orden ascendente de acuerdo con la relación de ordenación. Se proporcionan dos formas de operación. La forma simple toma una Lista y la ordena de acuerdo con su orden natural. La segunda forma de ordenación usa Comparador además de Lista y usa Comparador para ordenar los elementos.
Barajar
El algoritmo de reproducción aleatoria destruirá cualquier seguimiento de orden que pueda existir en la lista. Es decir, el algoritmo reordena la lista en función de la entrada de fuentes aleatorias, de modo que suponiendo una fuente aleatoria justa, todas las permutaciones posibles ocurren con la misma probabilidad. Este algoritmo es útil para realizar juegos de azar.
buscar
El algoritmo binarySearch busca el elemento especificado en la lista ordenada. El algoritmo tiene dos formas. El primero usa Lista y los elementos a buscar ("palabras clave de búsqueda"). Este formulario asume que la Lista está ordenada en orden ascendente de acuerdo con el orden natural de sus elementos. Además de la lista y las claves de búsqueda, el segundo formulario también usa Comparator y supone que List está ordenada en orden ascendente según el Comparator especificado. El algoritmo de clasificación se puede usar para ordenar la Lista antes de llamar a binarySearch.
composición
La frecuencia y los algoritmos disjuntos prueban ciertos aspectos de la composición de uno o más conjuntos.
- frequency: Cuenta el número de veces que el elemento especificado aparece en el conjunto especificado
- disjoint: Determine si los dos conjuntos no se cruzan; es decir, si no contienen elementos comunes
Mínimo y máximo
Los algoritmos min y max devuelven respectivamente los elementos mínimo y máximo contenidos en la Colección especificada. Ambas operaciones tienen dos formas. La forma simple acepta solo una Colección y devuelve el elemento más pequeño (o más grande) de acuerdo con su orden natural.
La segunda forma tiene un Comparador además de la Colección, y devuelve el elemento más pequeño (o más grande) de acuerdo con el Comparador especificado.
Características de la API de Java 8 Collections
Java 8El mayor cambio está relacionado con la API de colección. Algunos cambios y mejoras importantes son:
- Introducido para procesamiento secuencial y paraleloStream API, Deberías leerJava Stream API TutorialPara más información detallada.
- La interfaz iterable se ha ampliado con el método predeterminado forEach () para iterar sobre las colecciones.
- Expresión lambdaY la interfaz funcional se utiliza principalmente para la clase API de colección.
Cambios de la API de colecciones de Java 10
- Los métodos List.copyOf, Set.copyOf y Map.copyOf se utilizan para crear colecciones no modificables.
- La clase Collectors obtiene varios métodos (Set, List, Map) para recolectar colecciones no modificables. Los nombres de los métodos son UnmodifiableList, toUnmodifiableSet y toUnmodifiableMap.
Echemos un vistazo a estos nuevosJava 10Ejemplos de uso de métodos API de colecciones.
Cambios de la API de colecciones de Java 11
toArray(IntFunction<T[]> generator)
Se ha agregado un nuevo método predeterminado a la interfaz de la Colección. Este método devuelve una matriz que contiene todos los elementos de esta colección, utilizando la función de generador proporcionada para asignar la matriz devuelta.
Salida:
Colecciones en cáscaras de nuez
La siguiente tabla proporciona detalles básicos de las clases de colección comúnmente utilizadas.
Descargar URL:Clase de colección de Java
colección | orden | Acceso aleatorio | valor central | Elemento de repetición | Elemento vacío | A salvo de amenazas |
---|---|---|---|---|---|---|
Lista de arreglo | ||||||
Lista enlazada | ||||||
HashSet | ||||||
TreeSet | ||||||
HashMap | ||||||
TreeMap | ||||||
vector | ||||||
Tabla de picadillo | ||||||
Atributos | ||||||
montón | ||||||
CopyOnWriteArrayList | ||||||
ConcurrentHashMap | ||||||
CopyOnWriteArraySet |
No hay comentarios:
Publicar un comentario