如何按字母顺序对哈希表元素进行排序?例如,我的元素是:
cijfercode, Zweeds, Doorloper, Kruizword, Crypto, Woordzoker
Run Code Online (Sandbox Code Playgroud)
编辑:我也有一个排序哈希表元素的解决方案.这是解决方案:
java.util.Vector vec = new java.util.Vector(hashtableList.keySet());
Collections.sort(vec);
Run Code Online (Sandbox Code Playgroud)
如果这些"元素"是键,则可以将它们存储在a中TreeMap,这将根据键的自然顺序生成一致的顺序.请注意,除了创建一个旧地图传递给构造函数之外,您不需要做太多工作:
Map<String,?> map = ?
Map<String,?> orderedMap = new TreeMap<String,?>(map);
Run Code Online (Sandbox Code Playgroud)
然后,像正常一样迭代:
for(String key : orderedMap.keys()){
}
Run Code Online (Sandbox Code Playgroud)
如果您的"元素"是值,那么您可以将它们作为键插入到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()){
}
Run Code Online (Sandbox Code Playgroud)
当然,如果你实际上没有使用任何与事实有关的事实,这些东西都在"哈希表"中(我将其视为实现的东西Map),那么你可以加载List你选择的一个,然后对它进行排序:
List<String> list = new ArrayList<String>(map.values()); // or use map.keys()
Collections.sort(list);
Run Code Online (Sandbox Code Playgroud)
如果您对默认排序顺序不满意String,请随意编写自己的比较器:
Collections.sort(list, new Comparator<String>(){
public int compare(String left, String right){
return // your impl
}
});
Run Code Online (Sandbox Code Playgroud)
compare必须在第left一个时返回一个负整数,如果left和right是相同则返回0,如果是第一个则返回一个正整数right.
Mark Elliot的想法是正确的.我不喜欢整个Map<?, List<?>>想法; 我对番石榴太过宠坏了.所以这是一个相同想法的番石榴版本:
SortedSetMultimap<String, ?> sorted = Multimaps.invertFrom(
Multimaps.forMap(map), TreeMultimap.create());
for (Map.Entry<String, ?> entry : sorted.entries()) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这就像Mark的代码大小的三分之一.:-)
| 归档时间: |
|
| 查看次数: |
5566 次 |
| 最近记录: |