Formación informática

Java | Joomla | MySQL

Curso de Java – Tema 26.1: qué es una colección y qué tipos existen

Colección interminable de personasEn muchas ocasiones tenemos que trabajar con datos que están relacionados de alguna forma. Por ejemplo, los datos de una factura parten del código de la misma; o los datos personales de una persona se relacionan de forma inequívoca con el Documento Nacional de Identidad. En este caso, las variables se quedan cortas y hay que utilizar las colecciones presentes en Java. La jerarquía completa de clases e interfaces es la imagen que encuentras un poco más abajo.

¿Qué son y qué tipos existen?

Una colección representa un grupo de objetos que son conocidos como elementos. Cuando queremos trabajar con un conjunto de elementos, necesitamos un almacén donde poder guardarlos. En Java, se emplea la interfaz genérica Collection para este propósito de la cual heredan el resto de tipos existentes. Gracias a esta interfaz, podemos almacenar cualquier tipo de objeto y podemos usar una serie de métodos comunes, como pueden ser: añadir, eliminar, obtener el tamaño de la colección…

Partiendo de la interfaz genérica Collection extienden otra serie de interfaces genéricas. Estas subinterfaces aportan distintas funcionalidades sobre la interfaz anterior: son los vectores o arreglos unidimensionales, las matrices o arreglos bidimensionales, los arraylist y los HashMap, entre otros. Veamos una descripción general de los diferentes tipos existentes englobados por tres interfaces.

Jerarquía de clases e interfaces tipo colección en Java

Interfaz Set

Define una colección que no puede contener elementos duplicados. Es importante destacar que, para comprobar si los elementos son elementos duplicados o no lo son, es necesario que dichos elementos tengan implementada, de forma correcta, los métodos equals y hashCode. Para comprobar si dos Set son iguales, se comprobarán si todos los elementos que los componen son iguales sin importar en el orden que ocupen dichos elementos. Ninguna de estas implementaciones es sincronizada; es decir, no se garantiza el estado del Set si dos o más hilos acceden de forma concurrente al mismo.

Dentro de la interfaz Set existen varios tipos:

  • HashSet almacena los elementos en una tabla hash. Es la implementación con mejor rendimiento de todas pero no garantiza ningún orden a la hora de realizar iteraciones. Proporciona tiempos constantes en las operaciones básicas siempre y cuando la función hash disperse de forma correcta los elementos dentro de la tabla hash. Es importante definir el tamaño inicial de la tabla ya que este tamaño marcará el rendimiento de esta implementación.
  • TreeSet almacena los elementos ordenándolos en función de sus valores. Es bastante más lento que HashSet. Los elementos almacenados deben implementar la interfaz Comparable.
  • LinkedHashSet almacena los elementos en función del orden de inserción. Es, simplemente, un poco más costosa que HashSet.

Interfaz List

La interfaz List define una sucesión de elementos que sí admite elementos duplicados. A parte de los métodos heredados de Collection, añade métodos que permiten mejorar los siguientes puntos:

  • Acceso posicional a elementos para manipular elementos en función de su posición en la lista.
  • Búsqueda de elementos concretos de la lista y devuelve su posición.
  • Iteración sobre elementos, mejorando el Iterator por defecto.
  • Permite realizar ciertas operaciones sobre rangos de elementos dentro de la propia lista.

Ninguna de estas implementaciones es sincronizada; es decir, no se garantiza el estado del List si dos o más hilos acceden de forma concurrente al mismo. Dentro de la interfaz List existen varios tipos:

  • ArrayList es la implementación típica. Se basa en un array redimensionable que aumenta su tamaño según crece la colección de elementos. Es la que mejor rendimiento tiene sobre la mayoría de situaciones.
  • LinkedList basa en una lista doblemente enlazada de los elementos, teniendo cada uno de los elementos un puntero al anterior y al siguiente elemento.

Interfaz Map

Asocia claves a valores. Esta interfaz no puede contener claves duplicadas y, cada una de dichas claves, sólo puede tener asociado un valor como máximo. Ninguna de estas implementaciones es sincronizada; es decir, no se garantiza el estado del Map si dos o más hilos acceden de forma concurrente al mismo. Dentro de la interfaz Map existen varios tipos:

  • HashMap almacena las claves en una tabla hash. Es la implementación con mejor rendimiento de todas pero no garantiza ningún orden a la hora de realizar iteraciones. Esta implementación proporciona tiempos constantes en las operaciones básicas siempre y cuando la función hash disperse de forma correcta los elementos dentro de la tabla hash. Es importante definir el tamaño inicial de la tabla ya que este tamaño marcará el rendimiento de esta implementación.
  • TreeMap almacena las claves ordenándolas en función de sus valores. Es bastante más lento que HashMap. Las claves almacenadas deben implementar la interfaz Comparable.
  • LinkedHashMap almacena las claves en función del orden de inserción. Es, simplemente, un poco más costosa que HashMap.

En este enlace encontrarás un diagrama de flujo para determinar cuando usar cada uno de los tipos vistos.

En los siguientes puntos explicaremos detalladamente las colecciones más detalladas para aprender a usarlas.

Curso de Java – Tema 25.5: ruptura de ciclos de repetición | Curso de Java – Tema 26.2: Arrays o vectores
Curso de Java - Índice Ejercicios Nivel Medio

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información