首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 數組、List、Map 三者互轉完整指南與代碼實戰

     編輯:Java 程式設計入門

轉換關系總覽

數組 List Map 互轉關系圖

三者轉換核心在於:數組↔List 通過 Arrays.asList / List.toArray;List↔Map 需指定鍵值提取邏輯;數組↔Map 通常經 List 中轉或借助工具類。

核心轉換代碼實戰

package util;

import java.util.*;
import org.apache.commons.collections.MapUtils;

public class Convert {
    public static void main(String[] args) {
        // 1. 數組 → List
        String[] arr = {"123", "456", "789", "123"};
        List<String> list = Arrays.asList(arr); // 固定長度列表,不可增刪
        // 可變列表:new ArrayList<>(Arrays.asList(arr))

        // 2. 數組 → Map (借助 Apache Commons Collections)
        // 一維數組:奇數索引為 Key,偶數為 Value;奇數長度最後一個捨棄
        Map map = MapUtils.putAll(new HashMap(), arr);
        // 二維數組視為多組鍵值對
        String[][] ss = {{"a", "b", "e"}, {"c", "d", "f"}};
        MapUtils.putAll(map, ss);

        // 3. List → 數組
        List<String> ls = new ArrayList<>();
        ls.add("wch");
        ls.add("name");
        String[] as = ls.toArray(new String[0]); // 推薦傳入類型化數組

        // 4. List → Map (主流流式寫法 Java 8+)
        Map<String, Integer> mapFromList = list.stream()
            .collect(Collectors.toMap(
                k -> k,           // Key mapper
                v -> v.length(),  // Value mapper
                (v1, v2) -> v1    // 鍵衝突合併策略
            ));

        // 5. Map → List (鍵集/值集/鍵值對集)
        List<String> keyList = new ArrayList<>(map.keySet());
        List<Object> valueList = new ArrayList<>(map.values());
        List<Map.Entry<String, Object>> entryList = new ArrayList<>(map.entrySet());

        // 6. Map → 數組
        String[] keys = map.keySet().toArray(new String[0]);
        Object[] values = map.values().toArray();
        Map.Entry[] entries = map.entrySet().toArray(new Map.Entry[0]);
    }
}

詳細場景與注意事項

數組 ↔ List

方向方法陷阱
數組 → ListArrays.asList(arr)返回固定長度 ArrayList,不可 add/remove,需 new ArrayList<>(Arrays.asList(arr)) 複製
List → 數組list.toArray(new T[0])傳入 new T[0] 讓 JVM 自動創建精確大小數組,避免反射開銷
基本類型數組無直接轉換int[] 需手動裝箱或用流 Arrays.stream(arr).boxed().collect(...)

List ↔ Map

  • List → Map:Java 8 Stream Collectors.toMap 最靈活,需處理鍵重複(合併函數)與空值。
  • Map → List:keySet()、values()、entrySet() 分別構造對應列表,視圖集合修改會影響原 Map。

數組 ↔ Map

Apache Commons Collections MapUtils.putAll(map, array) 支持:

  • 一維數組:[k1, v1, k2, v2...] 交替作為鍵值對。
  • 二維數組:每個子數組視為一組鍵值對 [key, value] 或多值。

缺點:語義隱晦,生產環境建議顯式寫入邏輯或使用 Java 8 Stream。

現代最佳實踐(Java 8+ Stream API)


// 數組 → Map (指定鍵值)
String[] data = {"id:1", "name:Tom", "id:2", "name:Jerry"};
Map<String, String> map = Arrays.stream(data)
    .map(s -> s.split(":"))
    .filter(arr -> arr.length == 2)
    .collect(Collectors.toMap(
        arr -> arr[0],
        arr -> arr[1],
        (v1, v2) -> v1 + "," + v2  // 衝突合併
    ));

// Map → 數組 (值數組)
String[] names = map.values().toArray(new String[0]);

// List → Map (反轉)
Map<String, String> reversed = entryList.stream()
    .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));

依賴坐標

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

或升級至 org.apache.commons:commons-collections4:4.4(包名變為 org.apache.commons.collections4)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved