-2

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

输出基本上是:

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

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

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);
    }
}
}
4

3 回答 3

1

Arrays while be reference types, do not inherit from the base Object superclass in Java, therefore they cannot and don't override the toString() method to provide a textual representation for themselves.

You can easily write a function that returns an Array as a String or you could use the java.util.Arrays class toString() method.

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

It might be better practice to write your own method however, I'll give you a head start with the signature:

private String charArrayToString(char[] chars) {
    return null;
}
于 2013-06-14T15:44:18.593 回答
0

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

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

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

于 2013-06-14T15:44:25.903 回答
0

java 中的数组不会覆盖 Object 中的 toString(),因此您只需得到一个 @,后跟它们的十六进制哈希码。

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

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

于 2013-06-14T15:47:43.680 回答