viernes, 19 de noviembre de 2021

Java Colecciones Tutorial

 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

  1. ¿Qué es el Java Collections Framework?
  2. Interfaz de colección de Java
  3. Clase de colección de Java
  4. Clase de colección
  5. Empaque sincrónico
  6. Embalaje no modificable
  7. Colección segura para hilos
  8. Algoritmo API de colección
  9. Características de la API de Java 8 Collections
  10. Cambios de la API de colecciones de Java 10
  11. Cambios de la API de colecciones de Java 11
  12. 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;VectorApilarTabla de picadilloFormació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.CollectionEs 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.Listjava.util.Setjava.util.Queueconjava.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.utilen 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 sonArrayListLinkedListHashMapTreeMapHashSetTreeSet. 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 subprocesosCopyOnWriteArrayListConcurrentHashMapCopyOnWriteArraySet. Estas clases se encuentran en el paquete java.util.concurrent. Todas las clases de colección existen enjava.utilconjava.util.concurrentpaquete.

  • 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.
Java,Java Collections Framework

 

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 (sizeisEmpty) Para verificar si el objeto dado está en la colección (contains), agrega y elimina elementos de la colección (addremove) 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,containsAlladdAllremoveAll,。retainAllclear

EstostoArrayLos 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 usariteratorMétodo para obtener la instancia de iterador de Collection. Iterador reemplazadoEnumerationMarco 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:HashSetTreeSet,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.ArrayListyLinkedListEs 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.

  1. List strList = new ArrayList<>();
  2. //add at last
  3. strList.add(0, "0");
  4. //add at specified index
  5. strList.add(1, "1");
  6. //replace
  7. strList.set(1, "2");
  8. //remove
  9. strList.remove("1");

-La lista de clases de colección proporciona algunos algoritmos útiles.sortshufflereversebinarySearchEspere.

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:HashMapTreeMap,conLinkedHashMap

La operación básica del mapa esputgetcontainsKeycontainsValuesize,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 esArrayListHashMapY 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 (addremovecontainsconsize), 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

NavigableSetImplementación basada en unTreeMap. Los elementos se ordenan en su orden natural o segúnComparatorSe 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 (getconput) 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.

  1. public static Collection synchronizedCollection(Collection c);
  2. public static Set synchronizedSet(Set s);
  3. public static List synchronizedList(List list);
  4. public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
  5. public static SortedSet synchronizedSortedSet(SortedSet s);
  6. public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m);

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;

  1. public static Collection unmodifiableCollection(Collection<? extends T> c);
  2. public static Set unmodifiableSet(Set<? extends T> s);
  3. public static List unmodifiableList(List<? extends T> list);
  4. public static <K,V> Map<K, V> unmodifiableMap(Map<? extends K, ? extends V> m);
  5. public static SortedSet unmodifiableSortedSet(SortedSet<? extends T> s);
  6. public static <K,V> SortedMap<K, V> unmodifiableSortedMap(SortedMap<K, ? extends V> m);

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 sonCopyOnWriteArrayListConcurrentHashMapCopyOnWriteArraySet

Lea estas publicaciones para obtener más información sobre ellas.

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:

  1. Introducido para procesamiento secuencial y paraleloStream API, Deberías leerJava Stream API TutorialPara más información detallada.
  2. La interfaz iterable se ha ampliado con el método predeterminado forEach () para iterar sobre las colecciones.
  3. 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

  1. Los métodos List.copyOf, Set.copyOf y Map.copyOf se utilizan para crear colecciones no modificables.
  2. 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.

  1. package com.journaldev.collections;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JDK10CollectionFunctions {
  6. public static void main(String[] args) {
  7. // 1. List, Set, Map copyOf(Collection) method
  8. List<String> actors = new ArrayList<>();
  9. actors.add("Jack Nicholson");
  10. actors.add("Marlon Brando");
  11. System.out.println(actors);
  12. // prints [Jack Nicholson, Marlon Brando]
  13. // New API added - Creates an UnModifiable List from a List.
  14. List<String> copyOfActors = List.copyOf(actors);
  15. System.out.println(copyOfActors);
  16. // prints [Jack Nicholson, Marlon Brando]
  17. // copyOfActors.add("Robert De Niro"); Will generate
  18. // UnsupportedOperationException
  19. actors.add("Robert De Niro");
  20. System.out.println(actors);
  21. // prints [Jack Nicholson, Marlon Brando, Robert De Niro]
  22. System.out.println(copyOfActors);
  23. // prints [Jack Nicholson, Marlon Brando]
  24. // 2. Collectors class toUnmodifiableList, toUnmodifiableSet, and
  25. // toUnmodifiableMap methods
  26. List<String> collect = actors.stream().collect(Collectors.toUnmodifiableList());
  27. System.out.println(collect);
  28. }
  29. }

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.

  1. package com.journaldev.collections;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. public class JDK11CollectionFunctions {
  6. public static void main(String[] args) {
  7. /*
  8. * JDK 11 New Method in Collection interface
  9. * default <T> T[] toArray(IntFunction<T[]> generator) {
  10. * return toArray(generator.apply(0)); }
  11. */
  12. List<String> strList = new ArrayList<>();
  13. strList.add("Java");
  14. strList.add("Python");
  15. strList.add("Android");
  16. String[] strArray = strList.toArray(size -> new String[size]);
  17. System.out.println(Arrays.toString(strArray));
  18. strArray = strList.toArray(size -> new String[size + 5]);
  19. System.out.println(Arrays.toString(strArray));
  20. strArray = strList.toArray(size -> new String[size * 3]);
  21. System.out.println(Arrays.toString(strArray));
  22. }
  23. }

Salida:

  1. [Java, Python, Android]
  2. [Java, Python, Android, null, null]
  3. [Java, Python, Android]

Colecciones en cáscaras de nuez

La siguiente tabla proporciona detalles básicos de las clases de colección comúnmente utilizadas.

Descargar URLClase de colección de Java

✎EditarFirmar

 

colecciónordenAcceso aleatoriovalor centralElemento de repeticiónElemento vacíoA 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