映射为java中另一个映射的值

时间:2015-07-26 12:46:32

标签: java dictionary

我需要使用String []键值在地图内创建String,Float的映射。 这是我实现它的方法:

import java.util.*;
public class Test {
static TreeMap<String,Float> map1;
static TreeMap<String[],TreeMap<String,Float>> map2;
public static void main (String[] args){
        map1 = new TreeMap<String,Float>();
        map2 = new TreeMap<String[],TreeMap<String,Float>>();
        map1.put("key",1.0f);
        map2.put(new String[]{"String1","String2"},map1);
        System.out.println(map2);
    }
}

它编译没有任何麻烦。 但是在启动这个程序之后我得到了ClassCastException:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.String; can
not be cast to java.lang.Comparable
        at java.util.TreeMap.compare(TreeMap.java:1290)
        at java.util.TreeMap.put(TreeMap.java:538)
        at Test.main(Test.java:9)

请你解释一下我的错误在哪里以及如何解决?

1 个答案:

答案 0 :(得分:2)

构建TreeMap实例而不将Comparator实例传递给构造函数时,地图的键必须实现Comparable。由于数组不会实现Comparable,因此您无法将此构造函数用于TreeMap,而密钥是数组。您必须将Comparator<String[]>传递给TreeMap

Comparator<String[]> comparator = ...
map2 = new TreeMap<String[],TreeMap<String,Float>>(comparator);