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.

leer  Cómo serializar ArrayList en java

¿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.

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *