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

unj*_*nj2 6 java sorting hashtable

我希望我的哈希值根据值按降序排序.我如何用Java做到这一点?

Bal*_*usC 13

A HashMap(及其遗留的前身Hashtable)本质上是无序的.即使你对它进行排序,它仍将是无序的.如果要维护广告订单,请LinkedHashMap改用.如果您想要对进行自动排序,无论插入顺序如何,请SortedMap改用.

如果你想对Mapon 进行排序,那么你基本上需要将键/值对放在另一种可排序的数据结构中,例如List<Entry<K, V>>,然后Collections#sort()在a的帮助下对其进行排序Compatator<Entry<K, V>>,最后LinkedHashMap用它重新填充a (不是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}
Run Code Online (Sandbox Code Playgroud)

对它进行排序descencing,使用以下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.
    }
});
Run Code Online (Sandbox Code Playgroud)