如何将TreeMap转换为Hashtable?

时间:2019-03-10 21:30:30

标签: java

我需要按键对哈希表进行排序,因此我使用TreeMap。问题是当我想从TreeMap返回到Hashtable时。在“ O”的情况下出现问题。 我需要知道如何对Hashtable进行排序,但是我使用TreeMap。可能这很容易解决。希望你能帮助我。

public static void main(String[] args) {
   //Scanner sc=new Scanner(System.in);
   Hashtable<String,String> Tabla=new Hashtable<>();
   Tabla.put("Ovidio", "Alto y flaco");
   Tabla.put("Alberto", "Bajo y reponedor");
   Tabla.put("Adrian", "Alto y portero");
   Tabla.put("Juan", "Bajo y flaco");

   String opc="";
   HshTableMenu p=new HshTableMenu();
   while(!opc.equals("S")){
      opc=p.menu();
      switch (opc){
          case "O": //Ordenar por clave
            Map<String, String> sortedMap = new TreeMap<String, String>(Tabla);
            Tabla=(Hashtable)sortedMap; //cant cast
            break;     
      }
   }
}

1 个答案:

答案 0 :(得分:0)

  

我需要知道如何对哈希表进行排序

Hashtable无法排序。 Hashtable是一个遗留集合,在1998年被Java 1.2集合所取代。我建议您避免使用它,最好使用ConcurrentHashMap。或者,如果您想要相同程度的同步,则可以使用Collections.synchronizedMap(new TreeMap<>())-进行同步和排序,但是与ConcurrentHashMap相比性能较差。

如果您仍然决定使用Hashtable,则可以通过列表对内存和速度进行更高效的存储:

List<String> sortedKeys = Collections.list(tabla.keys());
Collections.sort(sortedKeys);

然后您可以通过迭代器(或foreach循环-同一件事的语法糖)获得排序后的元素:

for (String key : sortedKeys) {
            String value = tabla.get(key);
            //...
}

或者如果您想按照样式排序:

Hashtable<String, String> tabla = new Hashtable<>();
TreeMap<String, String> sortedMap = new TreeMap<>(tabla);

返回哈希表

tabla.clear();
tabla.putAll(sortedMap); //reuse an already created object

tabla = new Hashtable<>(sortedMap); //create a new object