3

配列に変換したいHashMapがあります。以下のコードは次のとおりです:[[2、11、10、9]、[value1、value2、value3、value4]、[null、null、null、null]、[null、null、null、null]] 「null」エントリは、nullポインタ例外を与えます。なぜそれが本来の2倍の大きさなのですか?実際のエントリが必要です:[[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++;
    }

UPdated:::: 2つの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++;
        }
于 2012-05-26T09:28:23.587 に答える
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 に答える
3

キーセットと値が同じ順序で値を返す必要があるかどうかはわかりません(実装ドキュメントで指定されていないため、保証されていないと思います)。

エントリセットを操作してみてください。

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 に答える