我不确定这是否是您需要的,但这是我修改的代码:
Map<String, String[]> map = new HashMap<String, String[]>();
map.put("key1", new String[]{"value1", "test1"});
map.put("key2", new String[]{"value2"});
Object[] keys = map.keySet().toArray();
Object[] values = map.values().toArray();
System.out.println("key = " + keys[0] + ", value #1 = " + ((Object[])values[0])[0]);
System.out.println("key = " + keys[1] + ", value #1 = " + ((Object[])values[1])[0] + ", value #2 = " + ((Object[])values[1])[1]);
输出:
key = key2, value #1 = value2
key = key1, value #1 = value1, value #2 = test1
请注意,在key[0] 下您有"key2" 而不是"key1"。那是因为HashMap 不会按照您添加它们的顺序保留密钥。要更改它,您必须选择另一个 Map 实现(例如 TreeMap,如果您想按字母顺序排列)。
这是如何工作的? Java 允许您将数组转换为Object。 toArray() 方法返回 Object[] - Objects 的数组,但这些对象也是数组(字符串 - 正如您在地图中定义的那样)!如果您只打印value[0],它就像打印mySampleArray,其中mySampleArray 是:
Object[] mySampleArray = new Object[5];
所以你在整个数组而不是元素上调用它。这就是为什么你会得到 [Ljava.lang.String;@7c6768 等(这是 className@HashCode - 这就是默认的 toString() 方法所做的)。
为了了解你的元素,你必须更深入。
((Object[])values[0])[0]
这意味着:取 values[0](我们知道它包含一个数组),将其转换为数组并取第一个元素。
希望对您有所帮助,如果您需要任何其他信息,请告诉我。