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

标签 java sorting dictionary

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

cijfercode, Zweeds, Doorloper, Kruizword, Crypto, Woordzoker

编辑:我还得到了对哈希表元素进行排序的解决方案。这是解决方案:

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

最佳答案

如果这些“元素”是,您可以将它们存储在 TreeMap 中,这将根据键的自然顺序生成一致的顺序。请注意,除了使用传递给构造函数的旧 map 创建新 map 外,您不需要做太多事情:

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 的东西),那么你可以加载 List你选择的,然后排序:

List<String> list = new ArrayList<String>(map.values()); // or use map.keys()
Collections.sort(list);

如果您对 String 的默认排序顺序不满意,随意编写自己的比较器:

Collections.sort(list, new Comparator<String>(){
    public int compare(String left, String right){
        return // your impl
    }
});

compare left 时必须返回一个负整数首先出现,如果 left 则为 0和 right相同,如果 right 则为正整数先来。

关于java - 如何按字母顺序对哈希表中的元素进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853965/

相关文章:

haskell - Haskell monad 链接中的类型检查错误

dictionary - 这个并发映射有什么问题?

java - 无法将整数添加到 <Long> ArrayList

c# - 用于 ASP.NET 和 Java 的共享 MySQL 数据库

java - 如何编写更短的排序和分组算法?

c# - 按降序对数组进行排序的最快方法

ruby - 通过正则表达式对数组进行排序的更好方法?

java - 对于相同的值,客户端和服务器计算的 sha 不同

java - 为什么大括号后不需要分号?

swift - 'T' 与 'Int' 不同