我希望我的散列根据值按降序排序。我如何在 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/