java - 根据 Java 中的值对 map 进行排序的最简单方法是什么?

标签 java sorting hashtable

我希望我的散列根据值按降序排序。我如何在 Java 中做到这一点?

最佳答案

A HashMap (及其遗留前身 Hashtable )本质上是无序的。即使您对其进行排序,它也将保持无序状态。如果要维护插入顺序,请使用 LinkedHashMap 反而。如果你想对 keys 进行自动排序,而不考虑插入顺序,那么使用 SortedMap 相反。

如果你想对 Map 进行排序在 values 上,那么您基本上需要将键/值对放在另一种可排序的数据结构中,例如List<Entry<K, V>> , 然后使用 Collections#sort() 对其进行排序在Compatator<Entry<K, V>>的帮助下最后重新填充 LinkedHashMap用它(不是 HashMap 否则你会再次失去顺序)。

这是一个基本示例(将明显的运行时异常处理放在一边):

// Prepare.
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "bar");
map.put("bar", "waa");
map.put("waa", "foo");
System.out.println(map); // My JVM shows {waa=foo, foo=bar, bar=waa}

// Get entries and sort them.
List<Entry<String, String>> entries = new ArrayList<Entry<String, String>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<String, String>>() {
    public int compare(Entry<String, String> e1, Entry<String, String> e2) {
        return e1.getValue().compareTo(e2.getValue());
    }
});

// Put entries back in an ordered map.
Map<String, String> orderedMap = new LinkedHashMap<String, String>();
for (Entry<String, String> entry : entries) {
    orderedMap.put(entry.getKey(), entry.getValue());
}

System.out.println(orderedMap); // {foo=bar, waa=foo, bar=waa}

要对其进行降序排序,请使用以下 Comparator .基本上只是交换条目进行比较:

Collections.sort(entries, new Comparator<Entry<String, String>>() {
    public int compare(Entry<String, String> e1, Entry<String, String> e2) {
        return e2.getValue().compareTo(e1.getValue()); // Sorts descending.
    }
});

关于java - 根据 Java 中的值对 map 进行排序的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1894081/

相关文章:

javascript - 根据包含另一个数组中所有值的数组属性过滤对象数组

c++ - 您是否将比较之前的步骤包括在排序算法的迭代次数中?

python - 如何编写基于 C 的模块来处理 python 字典?

java - Unity3D 与 Eclipse for Android 项目集成

java - R.java 错误 : Class file collision

java - 带有源代码(不是 jar 库)的错误简单示例 lucene 4.0

java - 相同的无状态 session bean 在同一应用程序中工作不同

c - 如何将文件中的字符串列表读取到动态二维数组中,然后在 C 中对其进行排序

java - HashTable中的排序问题

c - 实现二次探测和链接 - 搜索字典