我已经查看了有关此主题的先前帖子-- 这篇文章和这篇文章。尽管如此,我仍然无法弄清楚下面代码中违反合同的原因。
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