ดึงอาร์เรย์จาก 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[] = me.getValue(); มันทำให้เกิดข้อผิดพลาด ไม่สามารถแปลงวัตถุเป็นสตริงได้ - person Mohit; 23.12.2013
comment
@Mohit: ขอบคุณที่ชี้ให้เห็น แก้ไขแล้ว ฉันลืมแคสต์ - person Flight Odyssey; 23.12.2013

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

โดยแต่ละค่าจะเป็น Array เมื่อคุณพิมพ์ ตามค่าเริ่มต้นการเรียกใช้เมธอด Object#toString() และส่งผลให้มีสตริงเลขฐานสิบหกนั้น

ลองใช้วิธี util จากคลาส Arrays เพื่อพิมพ์อาร์เรย์

System.out.println(Arrays.toString(me.getValue()));
person Suresh Atta    schedule 22.12.2013
comment
จริงๆ แล้วฉันต้องพิมพ์ข้อมูลที่เก็บไว้ใน hashmap... ข้อมูลที่ฉันดึงมาจาก map..Arrays.toString() ใช้งานไม่ได้กับวัตถุ... me.getValue() เป็นวัตถุ - person Mohit; 23.12.2013
comment
@Mohit เมื่อฉันพูดว่า array นั่นหมายถึง 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 คุณสามารถใช้ generics ดังนั้น Arrays.toString() จะได้รับ String[] - person jmj; 23.12.2013