1. 概述
本文将介绍如何使用 核心 Java 库、Guava 和 Apache Commons Collections 实现 Array 与 List 之间的相互转换。作为「Java 基础回顾」系列的一部分,我们将聚焦实际开发中最常用的转换方式。
2. 将 List 转换为 Array
2.1. 使用原生 Java
最基础的转换方式,直接调用 toArray()
方法:
@Test
public void givenUsingCoreJava_whenListConvertedToArray_thenCorrect() {
List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5);
Integer[] targetArray = sourceList.toArray(new Integer[0]);
}
⚠️ 注意:推荐使用 toArray(new T[0])
而非 toArray(new T[size])
。根据 Aleksey Shipilëv 的性能分析,这种方式:
- ✅ 执行更快
- ✅ 代码更简洁
- ✅ 避免潜在线程安全问题
2.2. 使用 Guava
Guava 提供了更简洁的 API,尤其适合基本类型数组:
@Test
public void givenUsingGuava_whenListConvertedToArray_thenCorrect() {
List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
int[] targetArray = Ints.toArray(sourceList);
}
3. 将 Array 转换为 List
3.1. 使用原生 Java
直接使用 Arrays.asList()
快速转换:
@Test
public void givenUsingCoreJava_whenArrayConvertedToList_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
List<Integer> targetList = Arrays.asList(sourceArray);
}
⚠️ 踩坑提醒:此方法返回的是固定大小的 List,底层仍依赖原数组。如果需要可修改的 ArrayList,需额外包装:
List<Integer> targetList = new ArrayList<>(Arrays.asList(sourceArray));
3.2. 使用 Guava
Guava 的 Lists.newArrayList()
提供了更直观的转换:
@Test
public void givenUsingGuava_whenArrayConvertedToList_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
List<Integer> targetList = Lists.newArrayList(sourceArray);
}
3.3. 使用 Commons Collections
Apache Commons Collections 的 CollectionUtils.addAll()
适合预初始化 List:
@Test
public void givenUsingCommonsCollections_whenArrayConvertedToList_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
List<Integer> targetList = new ArrayList<>(6);
CollectionUtils.addAll(targetList, sourceArray);
}
4. 总结
场景 | 推荐方案 | 特点 |
---|---|---|
List → Array | toArray(new T[0]) |
原生、高效 |
List → 基本类型 Array | Guava Ints.toArray() |
避免装箱开销 |
Array → 固定 List | Arrays.asList() |
轻量级 |
Array → 可修改 List | Guava Lists.newArrayList() |
简单粗暴 |
所有示例代码可在 GitHub 项目 中获取(Maven 项目,可直接导入运行)。