ClassCastException:java.util.ArrayList不是Comparable

时间:2013-06-03 06:35:47

标签: java hashmap mapping treemap

我的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());}}

3 个答案:

答案 0 :(得分:5)

正如错误消息所示,ArrayList没有实现Comparable所需的TreeMap接口来对地图中的元素进行排序。但是,您可以使用构造函数创建TreeMap,而不是Comparator,并根据您的排序规则实现比较器。

答案 1 :(得分:4)

来自TreeMap

的Java文档
  

基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。

List未实施Comparable因此您需要提供Comparator

我仍然无法弄清楚你为什么使用List。您可以使用TreeMap<Date, Double>

来实现所需

答案 2 :(得分:1)

您需要使用比较器,因为树图的键不会实现Comparable接口。

有一个TreeMap构造函数接受自定义Comparator,您可以使用自定义逻辑实现它。