如何按字母顺序对哈希表中的元素进行排序?

时间:2011-07-28 04:04:14

标签: java sorting map

如何按字母顺序对哈希表元素进行排序?例如,我的元素是:

cijfercode, Zweeds, Doorloper, Kruizword, Crypto, Woordzoker

编辑:我还有一个用于对哈希表元素进行排序的解决方案。这是解决方案:

java.util.Vector vec = new java.util.Vector(hashtableList.keySet());
Collections.sort(vec);

4 个答案:

答案 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出现时返回负整数,如果leftleft相同则返回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)