HashMaps中是否允许使用原始数组?

时间:2016-01-23 02:27:50

标签: java arrays dictionary hash hashmap

我尝试使用HashMap键和String值制作String[]。但是当我调用put方法并尝试编译时,它会给我这个错误:

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!  

不应该这样做吗?

3 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:1)

  

HashMaps中是否允许使用原始数组?

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

问题是您在put上呼叫options,而options不是HashMap。这是一个阵列!

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

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

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

答案 2 :(得分:0)

  

不应该这样做吗?

都能跟得上!您正在put()对象上调用String[]方法。

  

找不到符号 - 方法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)));