【发布时间】:2015-01-15 22:28:51
【问题描述】:
我已经查看过有关此主题的先前帖子 -- this 和 this。尽管如此,我还是无法弄清楚下面给出的代码中的合同违规是如何发生的。
public class ScoreComparator
implements Comparator<Map.Entry<?, Double>> {
public int compare(Map.Entry<?, Double> o1,
Map.Entry<?, Double> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
我的使用方式如下:
List<Entry<String, Double>> entryList =
new ArrayList<Entry<String, Double>>(
iterTypeScoreMap.get(keyToSort).entrySet());
Collections.sort(entryList, new ScoreComparator());
iterTypeScoreMap 声明如下
ConcurrentHashMap<String, Map<String, Double>> iterTypeScoreMap;
地图(iterTypeScoreMap)可以在排序过程中发生变化,这就是为什么我制作了一个列表的副本,然后对其调用排序。
由于我使用的是 Double 的内置 compareTo 方法,那不应该处理合同吗?另一个难以调试的原因是这个异常并不总是发生。仅在某些运行期间发生。这里可能是什么错误?
提前致谢。
【问题讨论】:
-
您是否使用此比较器直接对
SortedMap进行排序?或者你在单独的集合中使用它(例如List<Map.Entry<?, Double>>? -
地图中的值在排序过程中是否可能发生变化?
-
@Jack,说得好。将其包含在问题的编辑中。
-
@Sbodd,请检查编辑。它确实改变了。
标签: java comparator compareto