将哈希映射转换为数组

时间:2011-03-16 07:18:44

标签: java arrays hashmap

我有一个这样的散列图:

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

我想将它转换为数组,比如说Temp [],它包含来自hashmap的键的第一个值,以及第二个来自map的String [] - 数组,也作为数组。这可能吗?怎么样?

4 个答案:

答案 0 :(得分:5)

查看相同的问题here

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

答案 1 :(得分:1)

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

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%,你不需要写这样的东西......

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

    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数组,但这些对象也是数组(String,就像你在地图中定义的那样)!如果您只打印value[0],就像打印mySampleArray mySampleArray所在的那样:

Object[] mySampleArray = new Object[5];

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

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

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

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

我希望这会有所帮助,如果您需要任何其他信息,请与我们联系。