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.