在 Java 開發中,經常需要在 HashMap 與陣列之間進行資料轉換。本文將詳細說明如何將 Map 的鍵值對轉換為陣列,以及如何從陣列重建 Map,並提供完整的程式碼範例。
最常見的做法是遍歷 Map.entrySet(),將鍵與值分別存入兩個獨立的陣列中。
Map<String, String> map = new HashMap<>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
String[] keys = new String[map.size()];
String[] values = new String[map.size()];
int index = 0;
for (Map.Entry<String, String> entry : map.entrySet()) {
keys[index] = entry.getKey();
values[index] = entry.getValue();
index++;
}
注意: 原始程式碼中使用 key[key.length]=key 是錯誤的寫法,會導致 ArrayIndexOutOfBoundsException。正確做法是使用索引變數逐一填入。
若希望保持鍵值對的關聯性,可將每組 Entry 封裝為長度為 2 的字串陣列,再存入一個二維陣列或 List 中。
List<String[]> mapList = new ArrayList<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
String[] pair = { entry.getKey(), entry.getValue() };
mapList.add(pair);
}
// 若必須用陣列
String[][] mapArray = mapList.toArray(new String[0][]);
若已有鍵陣列與值陣列,且長度相同、順序對應,可透過迴圈重建 Map:
Map<String, String> restoredMap = new HashMap<>();
for (int i = 0; i < keys.length; i++) {
restoredMap.put(keys[i], values[i]);
}
若是二維陣列 String[][],則:
for (String[] pair : mapArray) {
if (pair.length == 2) {
restoredMap.put(pair[0], pair[1]);
}
}
List 先收集再轉陣列,避免手動管理索引。List<String[]> 優於兩個獨立陣列。