Java:如何转换HashMap< String,Object>

Java: how to convert HashMap<String, Object> to array

我需要把一个HashMap转换成一个数组;有人能告诉我怎么做吗?


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

编辑

应注意,两个数组的顺序可能不同,当需要成对键/值时,请参阅Oxbow_Lakes Answer以获得更好的迭代方法。


如果需要键和值,可以通过entrySet执行此操作:

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

从每个条目中,您可以(当然)通过getKeygetValue方法同时获得键和值。


如果你有HashMap hashMap,那么

hashMap.values().toArray();

将返回对象[]。如果需要someobject类型的数组,可以使用:

hashMap.values().toArray(new SomeObject[0]);


为确保每个键和值数组的顺序正确,请使用此选项(其他答案使用单独的Set,这些选项对顺序没有任何保证。

1
2
3
4
5
6
7
8
9
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++;
}


如果你想让hashmap维持秩序,可以考虑使用linkedhashmap来代替crackerjacks建议。据我所知,它的功能与hashmap相同,但它是fifo,因此它维护添加项目的顺序。


我用的几乎和@kmccoy一样,但我用的不是keySet(),而是

1
hashMap.values().toArray(new MyObject[0]);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Map<String, String> map = new HashMap<String, String>();
map.put("key1","value1");
map.put("key2","value2");

Object[][] twoDarray = new String[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];
}

for (int i = 0; i < twoDarray.length; i++) {
    for (int j = 0; j < twoDarray[i].length; j++) {
        System.out.println(twoDarray[i][j]);
    }
}

进入一维数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    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
2
3
4
5
6
7
8
9
10
11
12
13
14
   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++;
}

1
2
3
HashMap<String, String> hashMap = new HashMap<>();
String[] stringValues= new String[hashMap.values().size()];
hashMap.values().toArray(stringValues);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@SuppressWarnings("unchecked")
    public static <E,T> E[] hashMapKeysToArray(HashMap<E,T> map)
    {
        int s;
        if(map == null || (s = map.size())<1)
            return null;

        E[] temp;
        E typeHelper;
        try
        {
            Iterator<Entry<E, T>> iterator = map.entrySet().iterator();
            Entry<E, T> iK = iterator.next();
            typeHelper = iK.getKey();

            Object o = Array.newInstance(typeHelper.getClass(), s);
            temp = (E[]) o;

            int index = 0;
            for (Map.Entry<E,T> mapEntry : map.entrySet())
            {
                temp[index++] = mapEntry.getKey();
            }
        }
        catch (Exception e)
        {
            return null;
        }
        return temp;
    }
//--------------------------------------------------------
    @SuppressWarnings("unchecked")
    public static <E,T> T[] hashMapValuesToArray(HashMap<E,T> map)
    {
        int s;
        if(map == null || (s = map.size())<1)
            return null;

        T[] temp;
        T typeHelper;
        try
        {
            Iterator<Entry<E, T>> iterator = map.entrySet().iterator();
            Entry<E, T> iK = iterator.next();
            typeHelper = iK.getValue();

            Object o = Array.newInstance(typeHelper.getClass(), s);
            temp = (T[]) o;

            int index = 0;
            for (Map.Entry<E,T> mapEntry : map.entrySet())
            {
                temp[index++] = mapEntry.getValue();
            }
        }
        catch (Exception e)
        {return null;}

        return temp;
    }

你也可以试试这个。

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
    }

这里我使用字符串作为返回类型。您可以将其更改为所需的返回类型。