0

我有一个HashMap<String, Integer>如何对这个数据结构进行排序并保留键值映射?我想按 VALUES 而不是键排序。

Collection<Integer> counts = tableFrequency.values();

但后来我失去了键映射。或者是否有更好的关联数据结构可以用来代替 HashMap?

4

3 回答 3

6

Map按其值对 a 进行排序,您可以获取它entrySet并使用 custom对其进行排序Comparator

List<Entry<K,V>> sorted = new ArrayList<>(map.entrySet());
Collections.sort(sorted, new Comparator<Entry<K,V>>() {
    public int compare(Entry<K,V> o1, Entry<K,V> o2) {
        return o1.getValue().compareTo(o2.getValue());
    }
};
于 2012-04-16T00:02:26.353 回答
2

TreeMap 按照您添加它们的顺序保持元素。这对你来说似乎是一个完美的答案。

但请注意,某些操作会比使用 HashMap 慢得多,例如搜索......

于 2012-04-16T00:04:52.947 回答
1

该课程TreeMap是您想要的:

TreeMap treeMap = new TreeMap();

treeMap.put("One", new Integer(1));
treeMap.put("Two", new Integer(2));

Object obj = treeMap.get("Two");
System.out.println(obj);

它使用 compare() 方法来对元素进行排序。

由于您的新问题是关于按值排序,因此这是这篇文章的副本

于 2012-04-16T00:04:57.737 回答