Colecciones

Colecciones

Java incluye un conjunto de interfaces y clases genéricas en el paquete java.util, conocido como el Java Collection Framework (JCF), que incluye implementaciones de estructuras de datos y sus algoritmos para trabajar con colecciones de valores como listas, conjuntos, pilas o mapeos clave-valor[1]. Tal cual se muestra en el siguiente gráfico para cada interfaz existe al menos una implementación:

 collections_hierarchy_in_java

 Cuál implementación usar depende de los requerimientos de software pero las estructuras e implementaciones más usadas son las siguientes:

  • Para la interfaz Set, HashSet es la implementación más utilizada.
  • Para la interfaz List, ArrayList es la implementación más utilizada.
  • Para la interfaz Map, HashMap es la implementación más utilizada.

Como se muestra en el gráfico, todos los tipos de colección son un subtipo la interfaz Collection que as su vez es un subtipo de Iterable. En el siguiente video se muestra el manejo básico de colecciones empleando la funcionalidad definida en estas interfaces:

Listas

El igual que los arreglos, una lista es una colección ordenada de valores (secuencia); una lista, sin embargo, puede aumentar de tamaño dinámicamente a medida que se agregan valores. En el siguiente video demostrativo se emplea la clase ArrayList, seguramente la implementación más utilizada de la interfaz List, para realizar operar con listas. LinkedList es otra implementación que resulta más eficiente cuando los elementos se insertan al medio de la lista y no al final. Las clases Arrays y Collections proveen una serie de métodos muy útiles para el manejo de colecciones por lo que resulta muy recomendable estudiar la documentación de estas clases.

Conjuntos

Un conjunto es una colección de valores que no admite duplicados y, dependiendo de la implementación, la colección podría o no estar ordenada.

Mapas clave-valor

Un mapa es una colección que permite asociar un valor con otro valor conocido como “llave” (key). Un mapa no puede contener llaves duplicadas por lo que una clave puede estar asociada a un único valor.

Referencias

[1] Tutorial sobre JCF
[2] Java – Collections Cheat Sheet
[3] Java – Collection Interfaces and Implementations
[4] Java – Collections Complexity cheatsheet
[5] Practical Java Examples of the Big O Notation
[6] Java 8 Stream Tutorial
[7] Benchmark: How Misusing Streams Can Make Your Code 5 Times Slower
[8] 3 Reasons why You Shouldn’t Replace Your for-loops by Stream.forEach()
[1]También conocidos como diccionarios o arreglos asociativos

Comments are closed.