将HashMap转换为Array

时间:2012-05-26 09:17:58

标签: java android

我有一个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;
    }

谢谢!

3 个答案:

答案 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++;
}