【发布时间】:2013-09-26 05:16:00
【问题描述】:
我想做的是按值对地图进行排序。我查看了 stackoverflow 网站上提供的许多问题,发现以下解决方案可以满足我的要求,但缺少一点小东西。
Link1: 排序图
但我遇到的问题是,默认情况下这是按值升序排序的。我想按降序排列:
所以我所做的是我创建了一个实现比较器的类
class MyComparator implements Comparator {
Map map;
public MyComparator(Map map) {
this.map = map;
}
public int compare(Object o1, Object o2) {
return ((Integer) map.get(o2)).compareTo((Integer) map.get(o1));
}
}
然后我将我的地图传递给树形图,
MyComparator comp = new MyComparator(myMap);
Map<String, Integer> newMap = new TreeMap(comp);
newMap.putAll(myMap);
这似乎是一种不好的方法,因为我觉得这效率低下。有没有办法将链接中的解决方案更改为默认按降序排序。
【问题讨论】:
-
您会惊讶于效率低下和非效率低下。您应该运行一些测试...制作一张包含 50,000 个随机整数的地图并以这种方式排序,看看实际需要多长时间。 (并且这样做 100 次或更多,这样你就会得到一个很好的平均水平。)尽量不要去做你“觉得”效率低下的事情。
-
如果您真的阅读了链接答案中的 cmets,您会发现您使用的技术实际上是一个非常糟糕的主意。 stackoverflow.com/a/2581754/869736 是对这个问题的唯一普遍有效的答案。