我需要按键对哈希表进行排序,因此我使用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;
}
}
}
答案 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