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

映射为java中另一个映射的值,java,dictionary,Java,Dictionary,我需要创建字符串的映射,用字符串[]键值在映射内部浮动。 以下是我的实施方法: 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 Tree

我需要创建字符串的映射,用字符串[]键值在映射内部浮动。 以下是我的实施方法:

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);
    }
}

请您解释一下我的错误在哪里,以及如何修复它?

当您构建
TreeMap
实例而不将
比较器
实例传递给构造函数时,映射的键必须实现
Comparable
。由于数组不实现
Comparable
,因此不能将此构造函数用于
TreeMap
将键设为数组。您必须将
比较器
传递到
树映射

Comparator<String[]> comparator = ...
map2 = new TreeMap<String[],TreeMap<String,Float>>(comparator);
比较器比较器=。。。 map2=新树形图(比较器);
在代码中自己实现比较器。。。因为树映射按排序顺序存储键谢谢,现在我用LinkedHashMap替换树映射,它可以工作。@Roki20121实际上用LinkedHashMap它不工作,也不能工作,因为数组不会覆盖
对象的
equals
hashCode
。因此,如果您在映射中放置如下内容-
map2.put(新字符串[]{“aa”,“bb”},someValue)
-然后尝试使用-
map2.get(新字符串[]{“aa”,“bb”})
从映射中获取它,您将得到null,因为这两个字符串数组是不同的对象,并且它们彼此不相等。也许您应该使用
列表
而不是
字符串[]
作为键。
Comparator<String[]> comparator = ...
map2 = new TreeMap<String[],TreeMap<String,Float>>(comparator);