按值(包括字母数字)排序哈希表
答
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
}
}
答
为什么?你大概会选择HashTable而不是TreeMap,因为它具有更好的性能(并且没有排序)。如果你不想要性能,并且你想要订购,可以使用TreeMap。
答
如果你不希望创建一个新的类来保存键/值的关系和它,你不感兴趣的一个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;
}
});
答
第一个问题 - 你的意思是排序的价值,或者你的意思是排序的关键?
如果您只想按顺序访问排序值,最好的方法是创建列表或数组,然后进行排序。
对于值: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,这将保持排序。
**欢迎使用StackOverflow!**请尝试使您的问题标题**尽可能短/表达**。另外,帮助他人了解**你的意思。谢谢! ;-) – 2011-05-12 11:23:05