我有一个这样的散列图:
HashMap<String, String[]> map = new HashMap<String, String[]>();
我想将它转换为数组,比如说Temp [],它包含来自hashmap的键的第一个值,以及第二个来自map的String [] - 数组,也作为数组。这可能吗?怎么样?
答案 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允许您将数组转换为Object
。 toArray()
方法返回Object[]
- 一个Objects
数组,但这些对象也是数组(String,就像你在地图中定义的那样)!如果您只打印value[0]
,就像打印mySampleArray
mySampleArray
所在的那样:
Object[] mySampleArray = new Object[5];
所以你在整个数组上调用它而不是元素。这就是为什么你得到[Ljava.lang.String;@7c6768
等(这是className @ HashCode - 这就是默认的toString()
方法的作用)。
为了获得你的元素,你必须更深入。
((Object[])values[0])[0]
这意味着:取值[0](我们知道它包含一个数组),将它转换为数组并取第一个元素。
我希望这会有所帮助,如果您需要任何其他信息,请与我们联系。