2012-12-05 46 views
0
HashMap<String, int[]> H = new HashMap<String, int[]>(); 
H.put("drdetroit", new int[]{1,2}); 
H.put("drdetroit", new int[]{1,3}); 
System.out.println(H.get("drdetroit").toString()); 

它打印出HashMap的borks我的價值觀

[[email protected] 

我認爲這是散列值(是嗎?)。我怎樣才能讓它打印我的實際值?

+0

如果你想打印使用'的toString()'該陣列上的數組的值,你會得到一些東西的價值觀完全不同,它並不重要,如果它是一個HashMap或不。使用'Arrays.toString(array)'而不是 – andreih

+0

另外你的hashmap只打印第一個值,所以不要混淆。 :) –

+0

@limelights:我怎樣才能讓它打印他們兩個= –

回答

2

這就是你以後我相信。 由於HashMap只能存儲唯一的密鑰,所以如果你想爲一個(1)密鑰提供多個值,你就不得不使用一個列表。

也許有更好的方法來實現這一目標,但它的工作原理和本身非常具有表現力,並且非常清楚它的作用和方式。

HashMap現在接受List接口,因此可以接受任何實現它的列表類型。這是相當整潔! :)

ArrayList<int[]> values = new ArrayList<int[]>(); 

values.add(new int[]{1,2}); 
values.add(new int[]{1,3}); 

HashMap<String, List<int[]>> H = new HashMap<String, List<int[]>>(); 

H.put("drdetroit", values); 

for(String key : H.keySet()) { 
    for(int[] array : H.get(key)){ 
     System.out.println(Arrays.toString(array)); 
    } 
} 
0

因爲您嘗試從數組中創建一個字符串!

例如,你可以這樣做:

String myArray = H.get("drdetroit"); 
System.out.println(myArray[0]); 
+0

嗯,不,他只是打印它的對象值。 – Shark

2

您使用Arrays.toString(H.get("drdetroit"));

+0

這隻會打印第一個值而不是第二個值 –

+0

這是因爲一個Map只能有一個值,每個鍵只會覆蓋第一個值,第二個值是 –

+0

@Aviram Segal:是否有一個對象可以使用,每個對象允許多個值鍵? –

1
System.out.println(Arrays.toString(H.get("drdetroit"))); 

我 - 代表int陣列和c3c749是哈希碼

+0

這是行不通的,你給一個字符串Arrays.toString –

+0

@AviramSegal這是一個錯字錯誤:(因爲我直接輸入它 –

+0

從downvote改爲upvote :) –

0

嘗試使用此方法打印數組值 -

System.out.println(Arrays.toString(H.get("drdetroit"))); 

H.get("drdetroit").toString()在hexString中返回數組類名和@和散列碼。

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
}