Saltar a contenido

Colecciones ordenadas

Vamos a estudiar una variante del HashMap y HashSet, el LinkedHashMap y LinkedHashSet.

También están las versiones ordenadas del HashMap y el HashSet que son TreeMap y TreeSet.

Como las operaciones entre Map y Set son muy similares nos centraremos en los mapas.

LinkedHashMap

La clase LinkedHashMap es como HashMap con una característica adicional de mantener el orden de elementos insertados en ella.

HashMap proporciona la ventaja de una rápida inserción, búsqueda y borrado, pero NO mantiene el orden en el que se insertan los elementos. Con LinkedHashMap se puede acceder a los elementos en su orden de inserción.

Características

  • Un LinkedHashMap contiene valores basados en la clave.Implementa la interfaz del mapa y extiende la clase HashMap.
  • Contiene solo elementos únicos.
  • Solo puede tener una clave nula pero varios valores nulos.
  • Es lo mismo que HashMap con una característica adicional que mantiene el orden de inserción.

Los datos se almacenan en forma de nodos. La implementación de LinkedHashMap es muy similar a una lista doblemente enlazada. Por lo tanto, cada nodo del LinkedHashMap está representado como:

OrderCollections

  • Hash: Todas las claves (keys) de entrada se convierten en un hash, que es una forma más corta de la clave para que la búsqueda y la inserción sean más rápidas.
  • Key: Dado que esta clase extiende HashMap, los datos se almacenan en forma de par clave-valor. Este parámetro es la clave de los datos.
  • Value: Para cada clave, hay un valor asociado con él.
  • After: Dado que LinkedHashMap almacena la orden de inserción, contiene la dirección al siguiente nodo de la lista.
  • Before: Este parámetro contiene la dirección al nodo anterior de la lista.

TreeMap

Java TreeMap es una estructura de datos que implementa la interfaz Map<Key,Value>, se basa en un árbol binario y ordena por clave.

TreeMap es una implementación de Map que mantiene sus entradas ordenadas según el orden natural de sus claves. Para números significa orden ascendente, para cadenas, orden alfabético. Sin embargo, es posible utilizar un comparador si necesita cambiar la lógica.

HashMap le permite almacenar una clave nula y varios valores nulos. TreeMap ordena los elementos en orden natural y no permite claves nulas porque el método compareTo() arroja NullPointerException si se compara con nulo.

Nombre del Método Descripción Ejemplo
put(K key, V value) Inserta una clave y su valor asociado en el mapa. treeMap.put("clave1", "valor1");
get(Object key) Devuelve el valor asociado con la clave especificada. String valor = treeMap.get("clave1");
remove(Object key) Elimina la clave y su valor asociado del mapa. treeMap.remove("clave1");
containsKey(Object key) Devuelve true si el mapa contiene la clave especificada. boolean existe = treeMap.containsKey("clave1");
size() Devuelve el número de pares clave-valor en el mapa. int tamaño = treeMap.size();
clear() Elimina todos los pares clave-valor del mapa. treeMap.clear();
firstKey() Devuelve la primera clave (la más baja) actualmente en el mapa. K primeraClave = treeMap.firstKey();
lastKey() Devuelve la última clave (la más alta) actualmente en el mapa. K ultimaClave = treeMap.lastKey();
keySet() Devuelve un conjunto de todas las claves contenidas en el mapa. Set<K> claves = treeMap.keySet();
values() Devuelve una colección de todos los valores contenidos en el mapa. Collection<V> valores = treeMap.values();
entrySet() Devuelve un conjunto de todas las entradas (pares clave-valor) en el mapa. Set<Map.Entry<K, V>> entradas = treeMap.entrySet();
subMap(K fromKey, K toKey) Devuelve una vista del mapa cuyo rango de claves está entre fromKey y toKey. SortedMap<K, V> subMapa = treeMap.subMap("clave1", "clave3");
headMap(K toKey) Devuelve una vista del mapa cuyas claves son menores que toKey. SortedMap<K, V> headMapa = treeMap.headMap("clave3");
tailMap(K fromKey) Devuelve una vista del mapa cuyas claves son mayores o iguales a fromKey. SortedMap<K, V> tailMapa = treeMap.tailMap("clave1");