在 Java 中,可以通过以下三种方法将数组赋值给 List,具体选择取决于是否需要可修改性或特定列表类型:
1. 使用 Arrays.asList() 方法(不可修改列表)- 特点:直接将数组转换为固定大小的 List,不可添加或删除元素(但可修改已有元素的值)。
- 适用场景:仅需读取数组内容,无需修改列表结构。
- 示例代码:import java.util.Arrays;import java.util.List;Integer[] arr = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(arr); // 数组转List// list.add(6); // 抛出 UnsupportedOperationExceptionlist.set(0, 10); // 允许修改元素值
2. 使用 ArrayList 构造函数(可修改列表)- 特点:通过 Arrays.asList() 包装数组后,再传入 ArrayList 构造函数,生成可修改的 List。
- 适用场景:需要动态增删元素或使用 ArrayList 的特性(如随机访问)。
- 示例代码:import java.util.ArrayList;import java.util.Arrays;import java.util.List;Integer[] arr = {1, 2, 3, 4, 5};List<Integer> list = new ArrayList<>(Arrays.asList(arr));list.add(6); // 允许添加list.remove(0); // 允许删除
3. 使用循环逐个添加(灵活控制列表类型)- 特点:通过循环遍历数组,手动将元素添加到 List 中,可指定任意 List 实现类(如 LinkedList)。
- 适用场景:需要特定列表类型(如链表结构)或处理复杂逻辑时。
- 示例代码:import java.util.ArrayList;import java.util.LinkedList;import java.util.List;int[] primitiveArr = {1, 2, 3, 4, 5};List<Integer> list = new ArrayList<>(); // 或 LinkedList<>()for (int num : primitiveArr) { list.add(num); // 自动装箱为 Integer}// 若使用基本类型数组,需手动转换(如上例的自动装箱)
注意事项- 基本类型数组:若数组为基本类型(如 int[]),需先转换为包装类型数组(如 Integer[]),或通过循环逐个处理(利用自动装箱)。int[] primitiveArr = {1, 2, 3};List<Integer> list = new ArrayList<>();for (int num : primitiveArr) { list.add(num); // 自动装箱}
- 不可修改列表的限制:Arrays.asList() 返回的列表不支持 add()、remove() 等结构修改操作,否则抛出 UnsupportedOperationException。
- 性能考虑:循环方法效率较低,但灵活性最高;Arrays.asList() + 构造函数是平衡选择。
总结- 快速转换且无需修改:用 Arrays.asList(arr)。
- 需要动态操作:用 new ArrayList<>(Arrays.asList(arr))。
- 特定列表类型或复杂逻辑:用循环逐个添加。