如何按字母顺序对哈希表元素进行排序?例如,我的元素是:
cijfercode, Zweeds, Doorloper, Kruizword, Crypto, Woordzoker
编辑:我还有一个用于对哈希表元素进行排序的解决方案。这是解决方案:
java.util.Vector vec = new java.util.Vector(hashtableList.keySet());
Collections.sort(vec);
答案 0 :(得分:9)
如果这些“元素”是键,您可以将它们存储在TreeMap
中,这将根据键的自然顺序生成一致的顺序。请注意,除了使用传递给构造函数的旧映射创建新映射外,您不需要做太多工作:
Map<String,?> map = ?
Map<String,?> orderedMap = new TreeMap<String,?>(map);
然后,像正常一样迭代:
for(String key : orderedMap.keys()){
}
如果您的“元素”是值,那么您可以将它们作为键插入到原始键的TreeMap
跟踪中,像以前一样读取值的排序顺序(基本上创建)倒排索引):
Map<?,String> map = ?
Map<String,List<?>> orderedVals = new TreeMap<String,List<?>>();
for(Entry<?,String> map : map.entrySet()){
List<?> keys = orderedVals.get(map.getValue());
if(keys == null){
keys = new ArrayList<?>();
orderedVals.put(map.getValue(), keys);
}
keys.add(map.getKey());
}
// now orderedVals has keys in sorted order
for(String val : orderedVals.keys()){
}
当然,如果你实际上没有使用任何与事实有关的事实,这些东西都在“哈希表”中(我将其视为实现Map
的东西),那么你可以加载{{1}你所选择的,并对其进行排序:
List
如果您对List<String> list = new ArrayList<String>(map.values()); // or use map.keys()
Collections.sort(list);
的默认排序顺序不满意,请随意编写自己的比较器:
String
{p> Collections.sort(list, new Comparator<String>(){
public int compare(String left, String right){
return // your impl
}
});
必须在compare
出现时返回负整数,如果left
和left
相同则返回0,如果right
则返回正整数先到了。
答案 1 :(得分:5)
Mark Elliot的想法是正确的。我不喜欢整个Map<?, List<?>>
的想法;我在Guava上被宠坏了。所以这是一个相同想法的番石榴版本:
SortedSetMultimap<String, ?> sorted = Multimaps.invertFrom(
Multimaps.forMap(map), TreeMultimap.create());
for (Map.Entry<String, ?> entry : sorted.entries()) {
// ...
}
这就像马克代码大小的三分之一。 : - )
答案 2 :(得分:3)
java.util.Vector vec =new java.util.Vector(hashtableList.keySet());
Collections.sort(vec);
答案 3 :(得分:0)