将哈希图转换为数组[重复]

Posted

技术标签:

【中文标题】将哈希图转换为数组[重复]【英文标题】:convert a hashmap to an array [duplicate] 【发布时间】:2011-07-16 09:07:51 【问题描述】:

我有一个这样的哈希图:

HashMap<String, String[]> map = new HashMap<String, String[]>();

我想把它转换成一个数组,比如 Temp[],第一个值包含 hashmap 中的键,第二个值是 map 中的 String[]-array,也作为数组。这可能吗?怎么样?

【问题讨论】:

您的问题不清楚 - 您是在谈论一个新类的数组,其中每个实例都包含地图中的键和值? 【参考方案1】:

看到同样的问题here:

hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values

【讨论】:

代码现在是这样的:` HashMap map = new HashMap(); map.put("key1", new String[]"value1", "test1"); map.put("key2", new String[]"value2"); Object[][] twoDarray = new String[map.size()][]; Object[] 键 = map.keySet().toArray();对象[] 值 = map.values().toArray(); System.out.println(值[1]); System.out.println(values[2]);` 输出损坏。回馈 [Ljava.lang.String;@1f33675 ​​线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 at test.main(test.java:17) @tetsuya 您正在尝试访问 Values() HashSet 中支持的第三个元素,根据您的输入 不存在,因此您会得到 RuntimeException @tetsuya 数组中的索引从 0 开始。因此,如果地图中有 2 个条目,则只能访问 values[0] 和 values[1]。【参考方案2】:

嗯。你的问题真的很奇怪,但这是你问的:

HashMap<String, String[]> map = new HashMap<String, String[]>();
String[] keys = map.keySet().toArray();
Object[] result = new Object[keys.length*2]; //the array that should hold all the values as requested
for(int i = 0; i < keys.length; i++) 
  result[i] = keys[i]; //put the next key into the array
  result[i+1] = map.get(keys[i]); //put the next String[] in the array, according to the key.

但是,伙计,你为什么需要这样的东西?不管你想做什么,超过 99% 的机会你不需要写这样的东西......

【讨论】:

【参考方案3】:

我猜,你只需要写一个方法,就可以做你想做的事。

【讨论】:

【参考方案4】:

我不确定这是否是您需要的,但这是我修改的代码:

    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 允许您将数组转换为ObjecttoArray() 方法返回 Object[] - Objects 的数组,但这些对象也是数组(字符串 - 正如您在地图中定义的那样)!如果您只打印value[0],它就像打印mySampleArray,其中mySampleArray 是:

Object[] mySampleArray = new Object[5];

所以你在整个数组而不是元素上调用它。这就是为什么你会得到 [Ljava.lang.String;@7c6768 等(这是 className@HashCode - 这就是默认的 toString() 方法所做的)。

为了了解你的元素,你必须更深入。

((Object[])values[0])[0]

这意味着:取 values[0](我们知道它包含一个数组),将其转换为数组并取第一个元素。

希望对您有所帮助,如果您需要任何其他信息,请告诉我。

【讨论】:

以上是关于将哈希图转换为数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将哈希图转换为数组?

将字符串数组转换为哈希图[重复]

(Kotlin)如何将哈希图输出保存到文件中

如何使用意图将哈希图值发送到另一个活动

将 hashmap 转换为 stringarray

将 js 数组转换为字典/哈希图