2011-05-12 49 views
0

我有一個帶有字母數字值的HashTable。我想排序他們。
我該如何實現它?按值(包括字母數字)排序哈希表

+0

**歡迎使用StackOverflow!**請嘗試使您的問題標題**儘可能短/表達**。另外,幫助他人瞭解**你的意思。謝謝! ;-) – 2011-05-12 11:23:05

回答

2

HashTable不保留該順序。

所以最好創建一個List出來並排序。

你需要用你的類型分爲一類,然後實現一個比較所有類型的值(在你的任期)一比較,

class Foo implements Comparator<Foo>{ 
    private int no; 
    private String alpha; 
    //+getter/setters 

    public int compare(Foo f1, Foo f2){ 
     //put your logic here 
    } 
} 
0

爲什麼?你大概會選擇HashTable而不是TreeMap,因爲它具有更好的性能(並且沒有排序)。如果你不想要性能,並且你想要訂購,可以使用TreeMap。

0

如果你不希望創建一個新的類來保存鍵/值的關係和它,你不感興趣的一個TreeMap,然後像下面也將工作:

ArrayList<Entry<String,String>> list = new ArrayList<Entry<String,String>>(); 
list.addAll(map.entrySet()); 

Collections.sort(list, new Comparator<Entry<String,String>>() { 

    @Override 
    public int compare(Entry<String, String> o1, Entry<String, String> o2) { 
     //your logic here; 
    } 

}); 
0

第一個問題 - 你的意思是排序的價值,或者你的意思是排序的關鍵?

如果您只想按順序訪問排序值,最好的方法是創建列表或數組,然後進行排序。

對於值:Arrays.sort(table.values().toArray())Collections.sort(new ArrayList(table.values()))

對於鍵:Arrays.sort(table.keySet().toArray())Collections.sort(new ArrayList(table.keySet()))

更多關於這些排序方法:Arrays.sort()Collections.sort()

如果你想重複使用基於排序後的鍵,你會更好地使用TreeMap

如果您反覆想要基於排序後的值(而不是按鍵)進行訪問,那麼您總是可以按順序插入LinkedHashMap,這將保持排序。