1

我的哈希图中有两个数组,我想根据 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());}}
4

3 回答 3

5

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

于 2013-06-03T06:39:20.367 回答
4

来自 Java 文档TreeMap

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

List没有实现Comparable,所以你需要提供Comparator

我仍然无法弄清楚你为什么要使用List. 您需要的东西可以使用TreeMap<Date, Double>

于 2013-06-03T06:40:13.723 回答
1

您需要使用比较器作为树形图的键,但未实现 Comparable 接口。

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

于 2013-06-03T06:40:39.660 回答