Las colecciones de Java, estructuras de datos para guardar referencias a objetos

Escrito por el .
java planeta-codigo programacion
Comentarios

Java

Los programas en su funcionamiento manejan información y esta se guarda en algún tipo de estructura adecuada según el tipo de uso de esa información, ya sea para lectura al recuperar datos y escritura par insertar nuevos datos. En Java hay dos interfaces que el resto de colecciones implementa, una interfaz es Collection y la otra es Map, estas en su contrato define una serie de métodos que las implementaciones deben proporcionar.

Collection tiene métodos para saber si un determinado elementos está en la colección con contains y containsAll basándose en el método equals, iterar los elementos de la colección con iterator, desde Java 8 convertir la colección en un Stream, añadir elementos con add y addAll, eliminar elementos con remove y removeAll, comprobar si la colección está vacía con isEmpty, vaciar la colección con clear, obtener el número de elementos con size y algunos pocos métodos más.

La interfaz Map es para estructuras de datos que asocian a cada valor una clave por la que se recuperan los elementos tiene métodos para saber si existe una clave con containsKey o un valor con containsValue, obtener un valor por su clave con get, eliminar un valor según su clave con remove obtener el conjunto de clave con keySet o los valores con values, obtener el número de elementos de la colección con size, comprobar si está vacía con isEmpty también entre algunos otros más. La interfaz Map se basa en el método hashCode, por eso es importante implementar correctamente los métodos equals y hashCode correctamente en los objetos, de no hacerlo al usar el framework de colecciones se producirán comportamientos no deseados.

La interfaz List la implementan estructuras de datos en ls que los elementos están ordenados según el orden de inserción, como están ordenados se puede acceder por ellos mediante un índice, para ello añade dos métodos con get y remove con un índice por parámetro.

Las colecciones que implementan la interfaz Set no mantienen un orden y no permite valores duplicados basando la igualdad según el método equals de Object.

Queue también mantiene un orden en los elementos pero los elementos siguen la regla FIFO donde los elementos se añaden al final de la cola con add y los elementos se extraen de el inicio de la cola con element, peek, poll y remove.

Stack es una pila donde se sigue la regla LIFO, el método push añade un elemento en la parte de arriba de la pila y peek y pop obtiene el elemento son extraerlo y extraen elementos de la cima de la pila.

Las colecciones TreeSet y TreeMap mantienen los elementos ordenados según el orden natural definido por el método compareTo de la interfaz Comparable guarda la información en una estructura de árbol de forma que las búsquedas son más rápidas que un una lista.

Las implementaciones más utilizadas de estas estas interfaces son ArrayList, HashSet, HashMap, TreeSet, ArrayDeque y Stack.

Desde que en Java 8 se permiten implementaciones de métodos en las interfaces se proporcionan en algunas de estas varios métodos factoría para crear fácilmente colecciones generalmente con un método de nombre of como en la interfaz List. La clase Collections tiene métodos para hacer las colecciones inmutables y sincronizadas impidiendo que se les realicen modificaciones o sincronizadas si varios Thread de forma simultánea.

La librería Vavr proporciona otra API y conjunto de colecciones sin algunos errores de diseño pero que se han de mantener por compatibilidad o con algunas funcionalidades adicionales que la API de colecciones de Java no tiene.