Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre las colecciones las cuales antes de Java 2 no existian y se debian reemplazar por algunas clases vistas anteriormente como:

Anuncios

Las cuales nos permitian manipular grupos de objetos y si bien eran algo util todas ellas fallaban en un solo tema: la unificacion, por esto la forma de usar a Vector era distinta de usar a Properties.

Anuncios

Las colecciones framework fueron creadas justamente para estos siguientes temas:

  • Esta debia tener alta performance, las implementaciones de las colecciones (arrays dinamicos, listas vinculadas, arboles y tablas hash) debian ser altamente eficientes
  • Esta tenia que permitir a diferentes tipos de colecciones trabajar de una manera similar y con un alto grado de interoperabilidad
  • Esta se tenia que extender o adaptar facilmente
Anuncios

Para lograr esto, las colecciones framework estan diseñadas alrededor de un conjunto estandar de interfaces, poseen varias implementaciones como LinkedList, HashSet y TreeSet, las cuales se pueden usar como estan o implementar unas propias si a asi lo deseamos.

Anuncios

Una coleccion framework es una arquiterctura unificada para representar y manipular colecciones y estas contienen los siguientes elementos:

  • Interfaces, estos son tipos de datos abstractos que representan a las colecciones, nos permiten a las colecciones independientemente de sus representaciones y generalmente estas forman una jerarquia
  • Implementaciones, p.e. Clases, en concreto son la implementacion de la coleccion de interfaces y se considera como la estructura de datos reutilizable
  • Algoritmos, son los verdaderos encargados de hacer las partes mas complejas, como buscar y ordenar, sobre objetos que implementan las colecciones de interfaces. Estos a su vez son polimorfico, lo cual nos permite usarlo de multiples forma en la coleccion de interfaz apropiada
Anuncios

A su vez la coleccion framework define varias interfaces de map y otras clases, como vimos anteriormente Map almacena en formato clave/valor y si bien no son colecciones en todo su sentido, estas estan perfectamente integradas a las colecciones.

Anuncios
Anuncios

Como coleccion provee una buena cantidad de interfaces, pasemos a ver un listado de algunas de ellas:

  • La interfaz Collection, es la que permite trabajar con grupos de objetos, esta en la cima de la jerarquia de colecciones.
  • La interfaz List, extiende a la interfaz anterior y a su vez almacena una lista ordenada de los elementos
  • Set, extiende a Collection tambien y nos permite manejar conjuntos (sets) los cuales contienen elementos unicos
  • SortedSet, extiende a la interfaz anterior para tener conjuntos ordenados
  • Map, mapea claves unicas con valores
  • Map.Entry, es una clase interna de Map y nos describe un elemento (el par clave/valor) de un map
  • SortedMap, extiende a Map y nos permite tener a las claves en orden ascendente
  • Enumeration, esta interface heredada nos permite enumerar los elementos de una coleccion de objetos, esta interfaz es actualmente suplantada por Iterator
Anuncios

Nuestro siguiente tema sera sobre las clases de colecciones, algunas de estas proveen la implementacion de las interfaces anteriores y otras son de tipo abstracta las cuales nos daran un esqueleto para nuestras implementaciones que a su vez son usadas como punto de inicio para crear colecciones concretas, las clases mas comunes son las siguientes:

  • AbstractCollection, implementa la mayoria de la interfaz Collection
  • AbstractList, extiende la clase anterior e implementa la mayoria de la interfaz List
  • AbstractSequentialList, extiende la clase anterior para su uso por una colección que usa un acceso secuencial en lugar de un acceso aleatorio a sus elementos.
  • LinkedList, implementa un lista vinculada por extension de la clase anterior
  • ArrayList, implementa un array dinamico por extension de la clase AbstractList
  • AbstractSet, extiende a AbstractCollection e implementa la mayoria de la interfaz Set
  • HashSet, extiende AbstractSet para extender la tabla hash
  • LinkedHashSet, extiende HashSet para permitir iteraciones de orden de inserción
  • TreeSet, extiende AbstractSet y permite la implementacion de un conjunto almacenado en un arbol (tree)
  • AbstractMap, implementa la mayoria de la interfaz Map
  • HashMap, extiende AbstractMap para utilizarlo con una tabla hash
  • TreeMap, extiende AbstractMap para utilizar un tree
  • WeakHashMap, extiende la clase AbstractMap para utilizar una tabla hash con claves debiles
  • LinkedHashMap, extiende HashMap para permitir iteracciones de orden de insercion
  • IdentityHashMap, extends AbstractMap y utiliza la igualdad de referencia al comparar documentos
Anuncios

Las clases AbstractCollection, AbstractList, AbstractSet, AbstractSequentialList y AbstractMap proveen de esqueletos para implementaciones del nucleo de las interfaces de coleccion, esto es para reducir al minimo el esfuerzo para implementarlas.

Anuncios

Veamos algunas clases heredadas que hemos visto en posts anteriores pero que son utilizadas para las colecciones:

  • Vector, implementa un array dinamico, similar a ArrayList pero con diferencias
  • Stack, esta es una subclase de Vector e implementa el estandard ultimo-entra (Last-In) y primero-salir (First-Out)
  • Dictionary, es una clase abstracta que representa un repositorio de almacenaje de tipo clave/valor y opera de forma similar a Map
  • HashTable, fue parte original de java.util y es una implementacion concreta de Dictionary
  • Properties, es una subclase de HashTable y es utilizado para mantener tablas donde la clave y el valor son de tipo String
  • BitSet, esta clase es especial porque crea un Array que contiene valores en bits y puede incrementar su tamaño en caso de ser necesario
Anuncios

Nuestro siguiente tema sera hablar sobre tres formas de operar con nuestras colecciones, la primera va a ser Algoritmos. Las colecciones framework implementan varios tipos de algoritmos que pueden ser implementados a colecciones y map y estos son declarados de tipo static dentro de la clase Collection. Varios de estos metodos pueden lanzar un ClassCastException, esto ocurre cuando se intenta comparar tipos incompatibles o un UnsupportedOperationException, la cual ocurre cuando se intenta modificar una coleccion inmodificable.
Las colecciones definen tres variables estaticas: EMPTY_SET, EMPTY_LIST y EMPTY_MAP, los cuales son inmutables, de esta coleccion hablaremos mas adelante en otro post.

Otra forma de trabajar con las colecciones es el iterator, este tipo de clase la utilizamos cuando necesitamos utilizar un bucle con nuestro elementos de la coleccion, un ejemplo es mostrar a cada uno de los elementos de la misma. La forma mas simple es utilizar el iterator o la interfaz ListIterator, esta clase te permite hacer bucle en esta coleccion, obteniendo o removiendo elementos de la misma, y ListIterator extiende a Iterator para permitir un desplazamiento bidireccional para listar o modificar elementos, en otro post mas adelante veremos como trabajar con Iterator en colecciones.

Anuncios

Como dijimos antes, TreeSet y TreeMap almacenan elementos de forma ordenada pero Comparator era el encargado de definir que significaba ordenada, esta interfaz nos permite ordenar una coleccion dada de muchas diferentes formas y tambien pueden ser usada para ordenar cualquier instancia de cualquier clase (incluso las que no se pueden modificar), en otro post veremos como operar con ellas en las colecciones.

Anuncios

En resumen, las colecciones framework proporcionan al programador acceso a estructura de datos pre-empaquetados asi como algoritmos para manipularlos, una coleccion es un objeto que puede mantener referencias a otros objetos, las interfaces de coleccion declaran las operaciones que pueden ser usadas en cada tipo de coleccion y tanto las clases como las interfaces se encuentran dentro del paquete java.util, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00