2016-01-23 49 views
0

我试图使HashMapString键和String[]值。但是,当我打电话put方法,并尝试编译,它给了我这个错误:在HashMaps中允许原始数组吗?

cannot find symbol - method put(java.lang.String,java.lang.String[]) 

下面是相关代码:

String[] options = { 
     "Aside from you almost pulling my hair out, I think so.", 
     "Who are you?", 
     "Why can't I see anything?"}; 
    options.put("Hey man, are you alright?", options); //Compile time error! 

不应该工作的呢?

+0

'options.put();'? 'options'是数组! “HashMap”在哪里?你如何申报? – songyuanyao

+0

@songyuanyao O_o我也给HashMap'选项'命名了!好了,现在可以工作。男人,我现在感觉很蠢XP –

回答

0

Are primitive arrays allowed in HashMaps?

是的,他们被允许。并且java.lang.String[]不是原始数组 ...但无论如何它都是允许的。

问题是您在options上调用put,并且options不是HashMap。这是一个数组!

该错误消息实际上是报告java.lang.String[]没有put方法。


1 - 使用数组作为HashMap键被允许过,但它是一个坏主意。首先,阵列上的hashCodeequals方法不会从Object过载,因此密钥查找将基于对象标识。

2 - 基本数组是基元(非引用)类型的数组。 String是一个参考类型。

+0

我一直在这个代码几个小时,并没有注意到XP –

1

我想你使用的地图和字符串数组同名。

您需要:

Map optionsMap = new HashMap<String, String[]>(); 

然后

String[] options = { 
     "Aside from you almost pulling my hair out, I think so.", 
     "Who are you?", 
     "Why can't I see anything?"}; 
optionsMap.put("Hey man, are you alright?", options); 
0

Shouldn't this work?

不是!您正在对String对象调用put()方法。

cannot find symbol - method put(java.lang.String,java.lang.String[])

事实上,这正是Java的方式是想告诉你由xD

下面的代码演示如何正确你String数组存储到一个散列映射。

Map<String, String[]> map = new HashMap<>(); 
String key = "Hey man, are you alright?"; 
String[] options = { 
     "Aside from you almost pulling my hair out, I think so.", 
     "Who are you?", 
     "Why can't I see anything?"}; 
map.put(key, options); 

System.out.println(Arrays.asList(map.get(key)));