【Java】Arrays.asList() 详解以及如何将数组转化为ArrayList

博客主要介绍了 Arrays.asList() 方法,其作用是将数组转化成 List 集合,但得到的 List 长度不可改变。同时说明了该方法的注意事项,如适用于对象型数据数组,不支持 add 等方法。还给出代码示例,并介绍了使用 Arrays.asList() 和 Java8 的 Stream 正确将数组转换为 ArrayList 的方法。

1.Arrays.asList() 作用

Arrays.asList()方法是将数组转化成List集合。
用此方法得到的List的长度是不可改变的,

 List<String> list = Arrays.asList("a","b","c");

2.Arrays.asList() 注意事项

(1)该方法适用于对象型数据的数组(String、Integer…)
(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
(4)不支持add()、remove()、clear()等方法

解释:不支持add()、remove()、clear()等方法

当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException)。

总结:

如果你的List只是用来遍历,就用Arrays.asList()。
如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素。

3.Arrays.asList() 代码示例

 public static void main(String[] args) {
        // 1.对象类型(String型)的数组使用asList()
        String []strings={"aa","bb","cc"};
        List<String> stringList=Arrays.asList(strings);
        System.out.println("1.String类型数组使用asList(),正常");
        for (String str:stringList){
            System.out.println(str+" ");
        }

        System.out.println("------------");

        // 2.对象类型(Integer型)的数组使用asList()
        Integer []integers={1,2,3};
        List<Integer> integerList=Arrays.asList(integers);
        System.out.println("2.Integer型的数组使用asList(),正常");
        for (int i:integerList){
            System.out.println(i+" ");
        }

        System.out.println("------------");

        // 3.基本数据类型使用asList(),出错
        int []nums=new int[]{1,2,3};
        List<int []> intList=Arrays.asList(nums);
        System.out.println("3.基本数据类型的数组使用asList(),出错(输出的是一个引用)");
        for (Object obj:intList){
            System.out.println(obj.toString());
        }
        System.out.println();
        System.out.println("这样遍历才能正确输出:");
        int []nums1=(int [])intList.get(0);
        for (int i:nums1){
            System.out.println(i+" ");
        }

        System.out.println("------------");

        // 4.当更新数组或者List,另一个将自动获得更新
        System.out.println("4.当更新数组或者List,另一个将自动获得更新:");
        integerList.set(0,5);
        for (int i:integerList){
            System.out.println(i+" ");
        }
        System.out.println();
        for (int i:integers){
            System.out.println(i);
        }

        System.out.println("------------");

        // 5. add()  remove()  报错
        System.out.println("5. add()  remove()  报错");
//        integerList.remove(0);
//        integerList.add(3,4);
//        integerList.clear();
    }

输出结果:

1.String类型数组使用asList(),正常
aa 
bb 
cc 
------------
2.Integer型的数组使用asList(),正常
1 
2 
3 
------------
3.基本数据类型的数组使用asList(),出错(输出的是一个引用)
[I@4554617c

这样遍历才能正确输出:
1 
2 
3 
------------
4.当更新数组或者List,另一个将自动获得更新:
5 
2 
3 

5
2
3
------------
5. add()  remove()  报错
Exception in thread "main" java.lang.UnsupportedOperationException

4.如何正确的将数组转换为 ArrayList

4.1 使用Arrays.asList()

List<String> stringList0=Arrays.asList("a","b","c");

4.2 使用Java8的Stream

        // 对象类型
        Integer []array={1,2,3};
        List list=Arrays.stream(array).collect(Collectors.toList());

        // 基本类型也可以实现转换(依赖boxed的装箱操作)
        int []array1={4,5,6};
        List list1=Arrays.stream(array1).boxed().collect(Collectors.toList());

参考:
参考一

<think>我们被要求回答关于JavaArrays.asList方法的使用方法和示例。根据提供的引用,我们可以总结如下: Arrays.asList()java.util.Arrays类的一个静态方法,用于将数组或指定的一组对象转换为一个List集合。但需要注意的是,这个List是一个固定大小的列表,由原始数组支持,因此不能进行添加或删除等改变大小的操作,否则会抛出UnsupportedOperationException异常。 ### 主要特性: 1. **固定大小**:返回的列表是基于原始数组的,因此长度固定,不能添加或删除元素。 2. **视图**:返回的列表是数组的一个视图,对列表的修改(如set方法)会反映到原数组上,反之亦然。 3. **不支持基本类型数组**:如果传入一个基本数据类型(如int[])的数组,整个数组会被视为一个元素,因为泛型T不能是基本类型。 ### 使用方法: ```java import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // 示例1:将多个元素转换为列表 List<String> list1 = Arrays.asList("A", "B", "C"); System.out.println(list1); // 输出: [A, B, C] // 示例2:将数组转换为列表 String[] array = {"Apple", "Banana", "Orange"}; List<String> list2 = Arrays.asList(array); System.out.println(list2); // 输出: [Apple, Banana, Orange] // 修改列表会反映到原数组 list2.set(0, "Cherry"); System.out.println("修改后列表: " + list2); // 修改后列表: [Cherry, Banana, Orange] System.out.println("原数组: " + Arrays.toString(array)); // 原数组: [Cherry, Banana, Orange] // 尝试添加元素(会抛出异常) try { list2.add("Grape"); // 抛出UnsupportedOperationException } catch (Exception e) { System.out.println("不支持添加操作: " + e); } } } ``` ### 注意事项: 1. **基本类型数组问题**: ```java int[] intArray = {1, 2, 3}; List<int[]> list = Arrays.asList(intArray); // 注意:这里List的元素类型是int[],而不是Integer System.out.println(list.size()); // 输出1,因为整个intArray被当作一个元素 ``` 解决方法:使用包装类型数组 ```java Integer[] integerArray = {1, 2, 3}; List<Integer> integerList = Arrays.asList(integerArray); System.out.println(integerList.size()); // 输出3 ``` 2. **固定大小**:返回的列表不支持`add()`、`remove()`、`clear()`等改变大小的操作。 3. **序列化**:如果原数组是可序列化的,那么返回的列表也是可序列化的。 ### 应用场景: - 快速创建固定大小的列表(只读或修改元素值,不改变大小) - 需要将数组作为集合来使用(如使用集合的迭代器、contains等方法) ### 总结: `Arrays.asList()`是一个方便的工具,但使用时需注意其限制。如果需要可变列表,可以这样处理: ```java List<String> newList = new ArrayList<>(Arrays.asList(array)); ``` §§相关问题§§ 1. 如何将基本类型数组(如int[])正确转换为List? 2. 为什么Arrays.asList返回的列表不支持添加和删除操作? 3. 如何创建一个可变的Arrays.asList列表? 4. Arrays.asList和Collections.singletonList有什么区别? 5.Java 8中,Arrays.asList和Stream API如何结合使用?</think>### Java `Arrays.asList()` 方法详解 `Arrays.asList()` 是 `java.util.Arrays` 类提供的静态方法,用于将数组转换为固定大小的列表。以下是其核心特性和使用方法: #### 一、基本语法 ```java public static <T> List<T> asList(T... a) ``` #### 二、核心特性 1. **固定大小列表** - 返回的列表长度固定,**不能添加或删除元素** ```java List<String> list = Arrays.asList("A", "B", "C"); list.add("D"); // 抛出 UnsupportedOperationException ``` 2. **数组视图** - 列表与原始数组共享数据 ```java String[] arr = {"Apple", "Banana"}; List<String> list = Arrays.asList(arr); list.set(0, "Orange"); // 修改列表 System.out.println(arr[0]); // 输出 "Orange"(原数组同步修改) ``` 3. **不支持基本类型** - 基本类型数组会被视为单个元素 ```java int[] nums = {1, 2, 3}; List<int[]> list = Arrays.asList(nums); System.out.println(list.size()); // 输出 1(而非3) ``` #### 三、正确使用示例 ```java // 1. 字符串数组转换 String[] fruits = {"Apple", "Banana", "Orange"}; List<String> fruitList = Arrays.asList(fruits); // 2. 直接传入元素 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); // 3. 修改元素(允许) fruitList.set(0, "Mango"); // 成功修改 // 4. 基本类型解决方案(Java 8+) int[] nums = {1, 2, 3}; List<Integer> numList = Arrays.stream(nums).boxed().collect(Collectors.toList()); ``` #### 四、常见问题及解决方案 | **问题场景** | **错误示例** | **解决方案** | |------------|------------|------------| | 添加/删除元素 | `list.add("X")` | 创建新列表:<br>`new ArrayList<>(Arrays.asList(...))` | | 基本类型处理 | `Arrays.asList(new int[]{1,2})` | 使用包装类:<br>`Arrays.asList(1, 2)` | | 修改列表大小 | `list.remove(0)` | 转换为可变列表:<br>`Collections.unmodifiableList()` | #### 五、典型应用场景 1. **快速初始化只读集合** ```java List<String> colors = Arrays.asList("Red", "Green", "Blue"); ``` 2. **配合集合方法使用** ```java Collections.sort(Arrays.asList(3, 1, 4, 2)); ``` 3. **批量操作元素** ```java Arrays.asList("A","B","C").replaceAll(String::toLowerCase); ``` > **重要提示**: > 返回的 `List` 是 `Arrays` 的内部类 `ArrayList`(非标准 `java.util.ArrayList`),其底层实现基于数组,因此具有固定大小特性[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值