在 Java 開發中,List、Set 與陣列之間的相互轉換是高頻操作。本文整理 JDK 原生與 Apache Commons Collections 兩大體系的轉換方案,並分析各方法優缺點與適用場景。
import org.apache.commons.collections.CollectionUtils;
String[] strArray = {"aaa", "bbb", "ccc"};
List strList = new ArrayList<>();
Set strSet = new HashSet<>();
CollectionUtils.addAll(strList, strArray);
CollectionUtils.addAll(strSet, strArray);
CollectionUtils.addAll() 內部以迴圈呼叫 add() 實現,通用性強,支援任意 Collection 實現類。
import java.util.Arrays;
String[] strArray = {"aaa", "bbb", "ccc"};
List strList = Arrays.asList(strArray);
注意:返回的 List 為固定大小,不支援 add/remove 操作,否則拋出 UnsupportedOperationException。若需可變 List,需再包裝:new ArrayList<>(Arrays.asList(array))。
直接呼叫 Collection 的 toArray() 方法:
Object[] toArray(); // 返回 Object 陣列
<T> T[] toArray(T[] a); // 返回指定型別陣列(推薦)
範例:
List list = Arrays.asList("a", "b", "c");
String[] array = list.toArray(new String[0]); // 尺寸為 0 讓 JVM 自動分配
直接使用 map.values() 取得值集合,或 map.keySet() 取得鍵集合:
Collection values = map.values();
Set keys = map.keySet();
| 轉換方向 | 程式碼範例 | 特性 |
|---|---|---|
| List → Set(去重) | new HashSet<>(list) |
自動去除重複元素 |
| Set → List | new ArrayList<>(set) |
保留順序(若為 LinkedHashSet) |
| 陣列 → List(可變) | new ArrayList<>(Arrays.asList(array)) |
支援增刪操作 |
| 陣列 → Set | new HashSet<>(Arrays.asList(array)) |
一步到位去重 |
Arrays.asList()、toArray()、建構子轉換,無額外依賴。