2012-12-05 16 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()); 
}