3

我有一个 HashMap,我想将其转换为数组。下面的代码,我得到以下内容: [[2, 11, 10, 9], [value1, value2, value3, value4], [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;
    }

谢谢!

4

3 回答 3

4

参考这个链接:::

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

更新::::获取两个一维数组

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++;
        }
于 2012-05-26T09:28:23.587 回答
3

我不确定 keyset 和 values 是否需要以相同的顺序返回值(在实现文档中没有指定,所以我说不能保证)。

尝试使用入口集:

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++;
}
于 2012-05-26T09:31:57.753 回答
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;

应该做(未测试)。

于 2012-05-26T09:30:11.353 回答