从hashmap中检索数组

时间:2013-12-22 18:02:47

标签: java arrays hashmap

我正在尝试创建一个具有String密钥的hashmap,并存储一个Integer数组。 使用hashmap.get()时,我想检索存储的数组。 我以前用过以下代码:

HashMap hm = new HashMap();
String[] arr=new String[]{"-1","-1","-1","-1"};
hm.put("A", arr);
hm.put("B", arr);
hm.put("C", arr);
hm.put("E", arr);
Set set = hm.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) 
{
    Map.Entry me = (Map.Entry)i.next();
    System.out.print(me.getKey() + ": ");
    System.out.println(me.getValue());
}

我得到的输出是:

D: [Ljava.lang.String;@88d00c6
E: [Ljava.lang.String;@88d00c6
A: [Ljava.lang.String;@88d00c6
B: [Ljava.lang.String;@88d00c6
C: [Ljava.lang.String;@88d00c6

任何人都可以帮忙!!

3 个答案:

答案 0 :(得分:3)

 System.out.println(me.getValue());

每个值都是一个数组。当您打印时,默认情况下Object#toString()方法调用并生成该十六进制字符串。

尝试使用Arrays类中的util方法来打印数组。

System.out.println(Arrays.toString(me.getValue()));

答案 1 :(得分:2)

使用Arrays.toString(me.getValue());代替,数组对象toString()的默认实现不会以漂亮的格式返回

答案 2 :(得分:1)

System.out.println对数组使用默认的toString方法,这很丑陋(有些人声称它是虚拟机中数组的内存地址)。而是使用实用程序功能或手动打印数组的内容。

while(i.hasNext()) 
{
    Map.Entry me = (Map.Entry)i.next();
    System.out.print(me.getKey() + ": ");
    String[] value = (String[])me.getValue();
    for(String str:value)
    {
        System.out.println(str+"\t");
    }
    System.out.println();
}