头图

问题来源

工作过程中,遇上了很多数组转List的问题。一直用的都是java提供的Arrays工具类里面的asList方法,没有仔细去看过源码,所以今天就研究下这个。

之前的写方法

public static void main(String[] args) {
        String[] original = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.asList(original);
    }

asList源码解析

image.png
3800行:返回一个ArrayList对象,需要注意的是这个对象并不是java.util.ArrayList对象

image.png
java.util.Arrays方法里面有一个内部类ArrayList对象,继承了AbstractList抽象类,只实现了一部分list接口,功能并不完善。

image.png
38行:调用没有实现的remove方法,运行时提示java.lang.UnsupportedOperationException异常

建议

对于一个list的后续处理,只是简单读,可以使用Arrays工具类里面的asList方法,但是如果涉及到了修改,还是尽量避免使用这个方法。

代码改进

public static void main(String[] args) {
        String[] original = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.stream(original).collect(Collectors.toList());
       
    }

38行:使用流把数组转对象,运行结果如下
image.png
产生的对象为java.util.ArrayList对象,且成功remove了一个值。


幻想的绝望
1 声望0 粉丝

在绝望中追寻