使用char数组打印出Hashmap

时间:2013-06-14 15:40:41

标签: java hashmap arrays

我正在尝试使用字符串键和char数组打印出一个简单的哈希映射,除非我没有得到正确的输出。

输出基本上是:

 Key :3  Value :[C@35960f05
 Key :2  Value :[C@35960f05
 Key :1  Value :[C@35960f05

我猜是char数组实际位置的代码?我没有谷歌,因为我真的不确定这意味着什么或它叫什么。可以请有人告诉我如何解决这个问题或者我可能在哪里找到信息,以便找到我自己的解决方案。这是我的代码:

public class MapExample {

public static void main(String[] args) {

    Map<String, char[]> mp = new HashMap<String, char[]>();

    char[] words = new char[3];
    words[0] = 'a';
    words[1] = 'b';
    words[2] = 'c';

    mp.put("1", words);
    mp.put("2", words);
    mp.put("3", words);

    Set s = mp.entrySet();
    Iterator it = s.iterator();

    while (it.hasNext()) {
        Map.Entry m = (Map.Entry) it.next();
        String key = (String) m.getKey();
        char[] value = (char[]) m.getValue();

        System.out.println("Key :" + key + "  Value :" + value);
    }
}
}

3 个答案:

答案 0 :(得分:1)

作为引用类型的数组,不要继承Java中的基类Object超类,因此它们不能也不会覆盖toString()方法为自己提供文本表示。

您可以轻松编写一个将Array作为String返回的函数,也可以使用java.util.ArraystoString()方法。

 import java.util.Arrays;
 System.out.println("Key :" + key + "  Value :" + Arrays.toString(value));

编写自己的方法可能是更好的做法,但是,我将为您提供签名的先机:

private String charArrayToString(char[] chars) {
    return null;
}

答案 1 :(得分:0)

因为你的值是字符数组(char[])。所以当你打电话时

System.out.println(... + value);

你调用数组的toString()方法。它打印类似对象描述符的东西。唯一的解决方案是获取value数组,迭代它并从中创建一个字符串。或致电Arrays.toString(value)

答案 2 :(得分:0)

java中的数组不会覆盖Object中的toString(),所以你只需得到一个@,然后是Hex中的哈希码。

类Arrays为这样的事情提供了几种方便的方法; Arrays.toString()是打印数组的正确方法,如果你正在使用多维数组,你可以使用Arrays.deepToString()。

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html