将数组放入Hashmap作为键或使用花括号的值不起作用

时间:2012-12-18 08:24:17

标签: java arrays char hashmap

为什么这是可能的

   Map <char[],char[]>F = new HashMap<char[],char[]>();
   char []R = {'J','K','L'};
   char []X = {'J','L'};
   F.put(R,X);

虽然这不是

   Map <char[],char[]>F = new HashMap<char[],char[]>();
   F.put({'J','K','L'}, {'J','L'});

4 个答案:

答案 0 :(得分:5)

第二个例子的正确语法是:

F.put(new char[]{'J','K','L'}, new char[]{'J','L'});

在初始化程序之外使用{'J', 'K', 'L'}时,编译器不会尝试猜测数组的类型。你必须明确说明。

另请注意,由于array1.equals(array2)会比较两个数组的地址,因此HashMap的行为方式会让您感到惊讶。考虑:

    Map<char[], char[]> F = new HashMap<char[], char[]>();
    F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
    F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
    System.out.println(F.size());

在我的机器上,即使两个键由完全相同的字符组成,也会打印2

答案 1 :(得分:0)

这是可能的 -

Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});

{'J', 'K', 'L'}是一个没有类型的匿名数组,会导致语法不匹配。

答案 2 :(得分:0)

{'J',...}不是您声明匿名数组的方式,您必须显式声明数组所包含的类型。

你可能想要

    Map <char[],char[]>F = new HashMap<char[],char[]>();
       F.put(new char[]{'J','K','L'}, new char[]{'J','L'});

答案 3 :(得分:0)

您必须明确指定操作数的类型

Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char []{'J','K','L'}, new char []{'J','L'});

这将有效。