Java. Sorted map by value
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to sort a Mapon the values in Java?
我需要像treemap一样排序的映射,但按值排序。我的地图会很大,所以我不能在需要的时候对地图进行排序。有没有解决这个问题的好办法?可能有外部罐子谁会遇到这个?
有很多方法可以满足您的需求。正如您随后澄清的那样,您当前的
如果您的数据是唯一的,您可以将它们保存在一个
然后,你可以单独持有你的
实际上没有任何数据结构能够有效地做到这一点:您必须维护一个数据结构,使按键查找更为有效,并且对值进行排序使维护该结构更加困难。
但是,如果在创建地图后不修改它,则可以这样做:
1 2 3 4 5 6 7 8 9 10 11 | List<Map.Entry<Key, Value>> list = new ArrayList<Map.Entry<Key, Value>>( map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Key, Value>>() { public int compare(Map.Entry<Key, Value> e1, Map.Entry<Key, Value> e2) { return e1.getValue().compareTo(e2.getValue()); } }); Map<Key, Value> sortedByValues = new LinkedHashMap<Key, Value>(); for (Map.Entry<Key, Value> entry : list) { sortedByValues.put(entry.getKey(), entry.getValue()); } |
生成的LinkedHashMap将按排序后的值顺序迭代。
如果您使用
- 现在用于索引的
TreeMap 。 - 一个
PriorityQueue (或其他排序列表),按排序顺序迭代您的值。
然后,只需在有任何更改时向两个列表添加和删除值。为此,您也不需要保留两个值的副本。您可以简单地将您现在拥有的一个副本添加到两个列表中,因为列表只使用对值的引用。