-1

可能重复:
如何对 Java 中的值对 Map<Key, Value> 进行排序?

我有一个treemap<Integer,Float>. 如何根据浮点数对地图进行排序?

有什么快速的方法吗?或者我必须为地图编写比较器?

4

2 回答 2

5

在实践中,您不能(正确、可靠地)Map按值对实现进行排序。(您可能会看到声称否则的实现是骇人听闻的,不可靠的,并且行为非常奇怪- 拒绝重复值,在尝试查看不在映射中的键时抛出异常,如果支持映射发生更改,则会出现不可恢复的损坏......)

相反,明确地对条目列表进行排序:

List<Map.Entry<Integer, Float>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Float>>() {
  public int compare(Map.Entry<Integer, Float> e1, Map.Entry<Integer, Float> e2){
    return e1.getValue().compareTo(e2.getValue());
  }
});

如果你喜欢,你可以把它放到一个LinkedHashMap

Map<Integer, Float> sortedMap = new LinkedHashMap<Integer, Float>();
for (Map.Entry<Integer, Float> entry : list) {
  sortedMap.put(entry.getKey(), entry.getValue());
}
于 2012-12-14T18:36:15.620 回答
2

最简单的解决方案可能是改用 LinkedHashMap,并按值对其进行排序。请参阅: 如何按其值类的字段对 LinkedHashMap 进行排序?

于 2012-12-14T18:39:59.313 回答