131

HashMap<String, Object>を配列に変換する必要があります。誰かがそれがどのように行われるかを私に見せてもらえますか?

4

14 に答える 14

212
hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values

編集

両方の配列の順序が同じでない場合があることに注意してください。キーと値のペアが必要な場合の反復のより良いアプローチについては、oxbow_lakesの回答を参照してください。

于 2009-07-07T05:47:14.803 に答える
73

キーと値が必要な場合は、いつでもentrySet:を介してこれを行うことができます。

hashMap.entrySet().toArray(); // returns a Map.Entry<K,V>[]

各エントリから、(もちろん)andメソッドを介してキーと値の両方を取得できます。getKeygetValue

于 2009-07-07T06:05:56.343 に答える
57

あなたが持っているHashMap<String, SomeObject> hashMap場合:

hashMap.values().toArray();

を返しますObject[]。代わりに type の配列が必要な場合はSomeObject、次を使用できます。

hashMap.values().toArray(new SomeObject[0]);
于 2011-04-15T21:05:49.877 に答える
30

キーと値の各配列の正しい順序を保証するには、これを使用します (他の回答Setでは、順序に関して保証されない個々の s を使用します。

Map<String, Object> map = new HashMap<String, Object>();
String[] keys = new String[map.size()];
Object[] values = new Object[map.size()];
int index = 0;
for (Map.Entry<String, Object> mapEntry : map.entrySet()) {
    keys[index] = mapEntry.getKey();
    values[index] = mapEntry.getValue();
    index++;
}
于 2011-08-07T18:26:33.633 に答える
12

CrackerJacksの提案の代わりに、HashMapで順序を維持したい場合は、代わりにLinkedHashMapを使用することを検討できます。私が知る限り、その機能はHashMapと同じですが、FIFOであるため、アイテムが追加された順序を維持します。

于 2011-11-16T14:52:38.513 に答える
6
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");

Object[][] twoDarray = new Object[map.size()][2];

Object[] keys = map.keySet().toArray();
Object[] values = map.values().toArray();

for (int row = 0; row < twoDarray.length; row++) {
    twoDarray[row][0] = keys[row];
    twoDarray[row][1] = values[row];
}

// Print out the new 2D array
for (int i = 0; i < twoDarray.length; i++) {
    for (int j = 0; j < twoDarray[i].length; j++) {
        System.out.println(twoDarray[i][j]);
    }
}
于 2010-09-16T12:55:45.513 に答える
3

1 次元配列を取得するには。

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


二次元配列で取得する。

   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++;
}
于 2014-04-17T09:39:11.733 に答える
0

これも試してみてください。

public static String[][] getArrayFromHash(Hashtable<String,String> data){
        String[][] str = null;
        {
            Object[] keys = data.keySet().toArray();
            Object[] values = data.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;
    }

ここでは、戻り値の型として String を使用しています。必要な戻り値の型に変更することができます。

于 2012-03-20T22:41:24.787 に答える