Java: marco de colecciones

Antes de Java 2, Java proporcionaba clases ad hoc como Dictionary, Vector, Stack, y Propertiespara almacenar y manipular grupos de objetos. Aunque estas clases fueron bastante útiles, carecían de un tema central y unificador. Por lo tanto, la forma en que usó Vector fue diferente de la forma en que usó Propiedades.

El marco de cobranza fue diseñado para cumplir con varios objetivos, tales como:

  • El marco tenía que ser de alto rendimiento. Las implementaciones para las colecciones fundamentales (matrices dinámicas, listas enlazadas, árboles y tablas hash) debían ser altamente eficientes.

  • El marco tenía que permitir que diferentes tipos de colecciones funcionaran de manera similar y con un alto grado de interoperabilidad.

  • El marco tenía que ampliar y / o adaptar una colección fácilmente.

Con este fin, todo el marco de las colecciones está diseñado en torno a un conjunto de interfaces estándar. Varias implementaciones estándar comoLinkedList, HashSet, y TreeSet, de estas interfaces se proporcionan para que pueda usarlas tal cual y también puede implementar su propia colección, si lo desea.

Un marco de colecciones es una arquitectura unificada para representar y manipular colecciones. Todos los marcos de colecciones contienen lo siguiente:

  • Interfaces- Estos son tipos de datos abstractos que representan colecciones. Las interfaces permiten manipular las colecciones independientemente de los detalles de su representación. En los lenguajes orientados a objetos, las interfaces generalmente forman una jerarquía.

  • Implementations, i.e., Classes- Estas son las implementaciones concretas de las interfaces de colección. En esencia, son estructuras de datos reutilizables.

  • Algorithms- Estos son los métodos que realizan cálculos útiles, como buscar y ordenar, en objetos que implementan interfaces de colección. Se dice que los algoritmos son polimórficos: es decir, el mismo método se puede utilizar en muchas implementaciones diferentes de la interfaz de colección apropiada.

Además de las colecciones, el marco define varias interfaces y clases de mapas. Los mapas almacenan pares clave / valor. Aunque los mapas no son colecciones en el uso adecuado del término, están completamente integrados con las colecciones.

Las interfaces de colección

El marco de las colecciones define varias interfaces. Esta sección proporciona una descripción general de cada interfaz:

No Señor. Interfaz y descripción
1 La interfaz de colección

Esto le permite trabajar con grupos de objetos; está en la parte superior de la jerarquía de colecciones.

2 La interfaz de lista

Esto se extiende Collection y una instancia de List almacena una colección ordenada de elementos.

3 El conjunto

Esto amplía la colección para manejar conjuntos, que deben contener elementos únicos.

4 El SortedSet

Esto amplía Set para manejar conjuntos ordenados.

5 El mapa

Esto asigna claves únicas a valores.

6 La entrada del mapa

Esto describe un elemento (un par clave / valor) en un mapa. Esta es una clase interna de Map.

7 El mapa ordenado

Esto amplía Map para que las claves se mantengan en orden ascendente.

8 La enumeración

Esta interfaz heredada define los métodos mediante los cuales puede enumerar (obtener uno a la vez) los elementos de una colección de objetos. Esta interfaz heredada ha sido reemplazada por Iterator.

Las clases de colección

Java proporciona un conjunto de clases de colección estándar que implementan interfaces de colección. Algunas de las clases proporcionan implementaciones completas que se pueden usar tal como están y otras son clases abstractas, proporcionando implementaciones esqueléticas que se utilizan como puntos de partida para crear colecciones concretas.

Las clases de colección estándar se resumen en la siguiente tabla:

No Señor. Clase y descripción
1

AbstractCollection

Implementa la mayor parte de la interfaz de la colección.

2

AbstractList

Extiende AbstractCollection e implementa la mayor parte de la interfaz List.

3

AbstractSequentialList

Extiende AbstractList para que lo utilice una colección que utiliza acceso secuencial en lugar de aleatorio a sus elementos.

4 Lista enlazada

Implementa una lista vinculada ampliando AbstractSequentialList.

5 Lista de arreglo

Implementa una matriz dinámica ampliando AbstractList.

6

AbstractSet

Extiende AbstractCollection e implementa la mayor parte de la interfaz Set.

7 HashSet

Extiende AbstractSet para su uso con una tabla hash.

8 LinkedHashSet

Extiende HashSet para permitir iteraciones de orden de inserción.

9 TreeSet

Implementa un conjunto almacenado en un árbol. Extiende AbstractSet.

10

AbstractMap

Implementa la mayor parte de la interfaz del mapa.

11 HashMap

Extiende AbstractMap para usar una tabla hash.

12 TreeMap

Extiende AbstractMap para usar un árbol.

13 WeakHashMap

Extiende AbstractMap para usar una tabla hash con claves débiles.

14 LinkedHashMap

Extiende HashMap para permitir iteraciones de orden de inserción.

15 IdentityHashMap

Extiende AbstractMap y utiliza la igualdad de referencias al comparar documentos.

Las clases AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList y AbstractMap proporcionan implementaciones esqueléticas de las interfaces de la colección principal, para minimizar el esfuerzo requerido para implementarlas.

Las siguientes clases heredadas definidas por java.util se discutieron en el capítulo anterior:

No Señor. Clase y descripción
1 Vector

Esto implementa una matriz dinámica. Es similar a ArrayList, pero con algunas diferencias.

2 Apilar

Stack es una subclase de Vector que implementa una pila estándar de último en entrar, primero en salir.

3 Diccionario

Dictionary es una clase abstracta que representa un repositorio de almacenamiento de clave / valor y funciona de manera muy similar a Map.

4 Tabla de picadillo

Hashtable era parte del java.util original y es una implementación concreta de un Diccionario.

5 Propiedades

Properties es una subclase de Hashtable. Se utiliza para mantener listas de valores en los que la clave es una Cadena y el valor también es una Cadena.

6 BitSet

Una clase BitSet crea un tipo especial de matriz que contiene valores de bits. Esta matriz puede aumentar de tamaño según sea necesario.

Los algoritmos de colección

El marco de colecciones define varios algoritmos que se pueden aplicar a colecciones y mapas. Estos algoritmos se definen como métodos estáticos dentro de la clase Colecciones.

Varios de los métodos pueden arrojar un ClassCastException, que ocurre cuando se intenta comparar tipos incompatibles, o un UnsupportedOperationException, que se produce cuando se intenta modificar una colección no modificable.

Las colecciones definen tres variables estáticas: EMPTY_SET, EMPTY_LIST y EMPTY_MAP. Todos son inmutables.

No Señor. Algoritmo y descripción
1 Los algoritmos de colección

Aquí hay una lista de toda la implementación del algoritmo.

¿Cómo utilizar un iterador?

A menudo, querrá recorrer los elementos de una colección. Por ejemplo, es posible que desee mostrar cada elemento.

La forma más sencilla de hacer esto es emplear un iterador, que es un objeto que implementa la interfaz Iterator o ListIterator.

Iterator le permite recorrer una colección, obteniendo o eliminando elementos. ListIterator extiende Iterator para permitir el recorrido bidireccional de una lista y la modificación de elementos.

No Señor. Método y descripción del iterador
1 Usando Java Iterator

Aquí hay una lista de todos los métodos con ejemplos proporcionados por las interfaces Iterator y ListIterator.

¿Cómo utilizar un comparador?

Tanto TreeSet como TreeMap almacenan elementos en un orden ordenado. Sin embargo, es el comparador el que define con precisión qué significa el orden ordenado .

Esta interfaz nos permite ordenar una colección determinada de diferentes formas. Además, esta interfaz se puede utilizar para ordenar cualquier instancia de cualquier clase (incluso las clases que no podemos modificar).

No Señor. Método y descripción del iterador
1 Utilizando Java Comparator

Aquí hay una lista de todos los métodos con ejemplos proporcionados por Comparator Interface.

Resumen

El marco de las colecciones de Java le da al programador acceso a estructuras de datos empaquetadas así como a algoritmos para manipularlas.

Una colección es un objeto que puede contener referencias a otros objetos. Las interfaces de colección declaran las operaciones que se pueden realizar en cada tipo de colección.

Las clases y las interfaces del marco de colecciones están en el paquete java.util.