我正在尝试使用字符串键和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);
}
}
}
答案 0 :(得分:1)
作为引用类型的数组,不要继承Java中的基类Object
超类,因此它们不能也不会覆盖toString()
方法为自己提供文本表示。
您可以轻松编写一个将Array作为String返回的函数,也可以使用java.util.Arrays
类toString()
方法。
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