Java: how to convert HashMap<String, Object> to array
我需要把一个
1 2 | hashMap.keySet().toArray(); // returns an array of keys hashMap.values().toArray(); // returns an array of values |
编辑
应注意,两个数组的顺序可能不同,当需要成对键/值时,请参阅Oxbow_Lakes Answer以获得更好的迭代方法。
如果需要键和值,可以通过
1 | hashMap.entrySet().toArray(); // returns a Map.Entry<K,V>[] |
从每个条目中,您可以(当然)通过
如果你有
将返回对象[]。如果需要someobject类型的数组,可以使用:
为确保每个键和值数组的顺序正确,请使用此选项(其他答案使用单独的
1 2 3 4 5 6 7 8 9 |
如果你想让hashmap维持秩序,可以考虑使用linkedhashmap来代替crackerjacks建议。据我所知,它的功能与hashmap相同,但它是fifo,因此它维护添加项目的顺序。
我用的几乎和@kmccoy一样,但我用的不是
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 |
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; } |
这里我使用字符串作为返回类型。您可以将其更改为所需的返回类型。