получить массив из hashmap

Я пытаюсь создать хэш-карту с ключом String и хранить массив 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

Кто-нибудь может помочь!!


person Mohit    schedule 22.12.2013    source источник
comment
Ознакомьтесь с методом Object#toString().   -  person Sotirios Delimanolis    schedule 22.12.2013


Ответы (3)


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();
}
person Flight Odyssey    schedule 22.12.2013
comment
в String[] value = me.getValue(); выдает ошибку не может преобразовать объекты в строки - person Mohit; 23.12.2013
comment
@Mohit: Спасибо, что указали на это, теперь исправлено. Я просто забыл cast. - person Flight Odyssey; 23.12.2013

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

Что каждое значение является массивом. Когда вы печатаете, по умолчанию вызывается метод Object#toString() и в результате получается эта шестнадцатеричная строка.

Попробуйте использовать метод util из класса Arrays для печати массива.

System.out.println(Arrays.toString(me.getValue()));
person Suresh Atta    schedule 22.12.2013
comment
На самом деле мне нужно распечатать данные, хранящиеся в хэш-карте... данные, которые я извлекаю из карты..Arrays.toString() не работает для объектов... me.getValue() - это объект - person Mohit; 23.12.2013
comment
@Mohit Когда я сказал массив, это означало me.getValue () :) - person Suresh Atta; 23.12.2013

вместо этого используйте Arrays.toString(me.getValue());, реализация по умолчанию объекта массива toString() не возвращается в красивом формате

person jmj    schedule 22.12.2013
comment
Arrays.toString() не работает для объектов... me.getValue() - это объект - person Mohit; 23.12.2013
comment
@Mohit, вы можете использовать дженерики, поэтому Arrays.toString() получит String[] - person jmj; 23.12.2013