Hashtable no conserva el orden de inserción ni ordena los datos insertados en función de claves o valores. Esto significa que independientemente de las claves y valores ingresados en Hashtable, el resultado no estaría en ningún orden en particular.
Por ejemplo: echemos un vistazo al siguiente programa y su salida:
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"); // Get a set of the entries Set set = ht.entrySet(); // Get an iterator Iterator i = set.iterator(); // Display elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } } }
Producción:
10: Chaitanya 9: Demo 3: Anuj 1: Ajeet 11: Test
Como puede ver, los pares clave-valor de salida están en orden aleatorio. No hemos recibido la orden de inserción ni los valores están ordenados por claves o valores.
La solución
Hay formas de ordenar Hashtable usando Collections.list
es Collections.sort
, sin embargo, lo mejor que puede hacer es utilizar LinkedHashMap o TreeMap.
Use LinkedHashMap: cuando desee mantener el orden de inserción.
Use TreeMap: cuando desee ordenar los pares clave-valor.
Tomemos el mismo ejemplo usando LinkedHashMap y TreeMap:
Usando LinkedHashMap
import 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"); // Get a set of the entries Set set = lhm.entrySet(); // Get an iterator Iterator i = set.iterator(); // Display elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } } }
Producción:
10: Chaitanya 1: Ajeet 11: Test 9: Demo 3: Anuj
Aquí lo tienes !! Obtuvimos el resultado en el orden de inserción.
¿Y si quisiéramos ordenar el resultado? Utilice TreeMap. Consulte el siguiente ejemplo:
Usar TreeMap
import java.util.*; public class 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"); // Get a set of the entries Set set = tm.entrySet(); // Get an iterator Iterator i = set.iterator(); // Display elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } } }
Producción:
1: Ajeet 3: Anuj 9: Demo 10: Chaitanya 11: Test
Como puede ver, la salida que obtuvimos está ordenada por claves.