我的Hash映射中有两个数组,我想根据timeStampArray中的时间对averageValueArray中存储的值进行排序。我正在使用TreeMap
,但我得到的ClassCastException
表示ArrayList无法比较。
这就是我在做的事情:
Map<List<Date>,List<Double>> sortMap = new HashMap<List<Date>,List<Double>>();
sortMap.put(timeStampArray, averageValueArray);
for (Map.Entry entry : sortMap.entrySet()) {
System.out.println("Key = " + entry.getKey());
System.out.println(" Value = " +entry.getValue());
}
System.out.println("Unsort Map......");
printMap(sortMap);
System.out.println("Sorted Map......");
TreeMap<List<Date>,List<Double>> treeMap = new TreeMap<List<Date>,List<Double>>(sortMap);
for (Map.Entry entry : treeMap.entrySet()) {
System.out.println("Key = " + entry.getKey());
System.out.println(" Value = " +entry.getValue());
}
printMap(treeMap);
printMap是:
public static void printMap(Map<List<Date>,List<Double>> map) {
for (Map.Entry entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + " Value : "
+ entry.getValue());}}
答案 0 :(得分:5)
正如错误消息所示,ArrayList
没有实现Comparable
所需的TreeMap
接口来对地图中的元素进行排序。但是,您可以使用构造函数创建TreeMap
,而不是Comparator
,并根据您的排序规则实现比较器。
答案 1 :(得分:4)
来自TreeMap
基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。
List
未实施Comparable
因此您需要提供Comparator
我仍然无法弄清楚你为什么使用List
。您可以使用TreeMap<Date, Double>
答案 2 :(得分:1)
您需要使用比较器,因为树图的键不会实现Comparable接口。
有一个TreeMap构造函数接受自定义Comparator,您可以使用自定义逻辑实现它。