2011-05-12 53 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,这将保持排序。