Por Chaitanya Singh | Filed Under: Colecciones de Java
Hashtable no conserva el orden de inserción, ni clasifica los datos insertados en base a claves o valores. Lo que significa que no importa qué claves y valores se insertan en Hashtable, el resultado no estaría en ningún orden particular.
Por ejemplo: Echemos un vistazo al siguiente programa y su resultado:
import java.util.*;public class HashtableDemo{ public static void main(String args[]) { Hashtable<Integer, String> ht= new Hashtable<Integer, String>(); ht.put(10, "Chaitanya"); ht.put(1, "Ajeet"); ht.put(11, "Test"); ht.put(9, "Demo"); ht.put(3, "Anuj"); // Obtener un conjunto de las entradas Set set = ht.entrySet(); // Obtener un iterador Iterator i = set.iterator(); // Mostrar elementos while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } }}
Salida:
10: Chaitanya9: Demo3: Anuj1: Ajeet11: Prueba
Como pueden ver, los pares clave-valor de salida están en orden aleatorio. No tenemos orden de inserción ni los valores están ordenados en base a claves o valores.
La solución
Hay formas de ordenar Hashtable usando Collections.list y Collections.sort, sin embargo lo mejor es usar LinkedHashMap o TreeMap.
Usa LinkedHashMap: Cuando quieras conservar el orden de inserción.
Usa TreeMap: Cuando quieras ordenar los pares clave-valor.
Tomemos el mismo ejemplo usando LinkedHashMap y TreeMap:
Usando LinkedHashMap
importar java.util.*;public class LinkedHashMapDemo{ public static void main(String args[]) { LinkedHashMap<Integer, String> lhm= new LinkedHashMap<Integer, String>(); lhm.put(10, "Chaitanya"); lhm.put(1, "Ajeet"); lhm.put(11, "Test"); lhm.put(9, "Demo"); lhm.put(3, "Anuj"); // Obtener un conjunto de las entradas Set set = lhm.entrySet(); // Obtener un iterador Iterator i = set.iterator(); // Mostrar elementos while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } }}
Salida:
10: Chaitanya1: Ajeet11: Prueba9: Demo3: Anuj
¡Voila! Tenemos el resultado en la orden de inserción.
¿Y si queremos ordenar el resultado? Usa el TreeMap. Ver el siguiente ejemplo:
Usar TreeMap
importar java.util.*;clase pública TreeMapDemo{ public static void main(String args[]) { TreeMap<Integer, String> tm= new TreeMap<Integer, String>(); tm.put(10, "Chaitanya"); tm.put(1, "Ajeet"); tm.put(11, "Test"); tm.put(9, "Demo"); tm.put(3, "Anuj"); // Obtener un conjunto de las entradas Set set = tm.entrySet(); // Obtener un iterador Iterator i = set.iterator(); // Mostrar elementos while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } }}
Salida:
1: Ajeet3: Anuj9: Demo10: Chaitanya11: Prueba
Como pueden ver, la salida que obtuvimos está ordenada en base a las claves.
- Cómo anular el método toString para ArrayList en Java
- Java – Eliminar la cartografía del ejemplo de HashMap
- Cómo hacer un bucle de ArrayList en Java
- Java – Comprueba si un valor en particular existe en el ejemplo de HashMap
- Java – Ejemplo de Convertir Vector en Lista de Arreglo
- Cómo sincronizar HashMap en Java con el ejemplo