我有一个HashMap,我想将其转换为数组。 下面的代码,我得到以下: [[2,11,10,9],[value1,value2,value3,value4],[null,null,null,null],[null,null,null,null]] “null”条目给我一个空指针异常。为什么它应该是它的两倍大?我只想要真正的条目: [[2,11,10,9],[value1,value2,value3,value4]]。我错了什么?
String[][] test = getArrayFromHash(hashmap);
public static String[][] getArrayFromHash(HashMap<String, String> hashMap){
String[][] str = null;
{
Object[] keys = hashMap.keySet().toArray();
Object[] values = hashMap.values().toArray();
str = new String[keys.length][values.length];
for(int i=0;i<keys.length;i++) {
str[0][i] = (String)keys[i];
str[1][i] = (String)values[i];
}
}
return str;
}
谢谢!
答案 0 :(得分:4)
请参阅此link :::
String[][] arr = new String[hashmap.size()][2];
Set entries = hashmap.entrySet();
Iterator entriesIterator = entries.iterator();
int i = 0;
while(entriesIterator.hasNext()){
Map.Entry mapping = (Map.Entry) entriesIterator.next();
arr[i][0] = mapping.getKey().toString();
arr[i][1] = mapping.getValue().toString();
i++;
}
UPdated :::: 获取两个1D数组
String[] arr1 = new String[hashmap.size()];
String[] arr2 = new String[hashmap.size()];
Set entries = hashmap.entrySet();
Iterator entriesIterator = entries.iterator();
int i = 0;
while(entriesIterator.hasNext()){
Map.Entry mapping = (Map.Entry) entriesIterator.next();
arr1[i] = mapping.getKey().toString();
arr2[i] = mapping.getValue().toString();
i++;
}
答案 1 :(得分:3)
分配适当大小的数组,如
str = new String[2][values.length];
此外,您应断言值和键具有相同的长度。并且匹配条目也出现在同一位置。像
这样的东西String[] keys = hashMap.keySet().toArray(new String[0]);
String[] values = new String[keys.length];
String[][] str = {keys, values};
for(int i=0;i<keys.length;i++) values[i] = hashMap.get(keys[i]);
return str;
应该做(未经测试)。
答案 2 :(得分:3)
我不确定键集和值是否必须以相同的顺序返回值(它没有在实现文档中指定,所以我说它不能保证)。
尝试使用entrysets:
Set<Map.Entry<String, String>> set = hm.entrySet();
int i = 0;
for (Map.Entry<String,String> me : set) {
arr[i][0] = me.getKey();
arr[i][1] = me.getValue()};
i++;
}