数组转ArrayList的正确方式

一、简介

今天,我们讲讲开发中常见的错误之一 - 数组转ArrayList的正确方式。

二、数组转ArrayList

项目中难免会有数组对象转换为List对象的需求,很多小伙伴们可能会这样写:

String[] array = new String[]{"a", "b", "c"};
//数组转List
List<String> list = Arrays.asList(array);
list.add("d");
System.out.println(list);

很不幸的是,上面的代码运行的话会直接报错:

原因解析,我们看一下Arrays.asList(array);方法的源码,发现返回值为ArrayList,但是这个ArrayList不是java.util.ArrayList,而是Arrays内部的一个私有静态内部类,查看size()可知道它的长度是固定的,不存在所谓的add()添加元素等方法。

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类,所以将上面的代码优化为:

List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("d");
//[a, b, c, d]
System.out.println(list);

上面的代码可以成功实现将数组对象转换为集合List对象,并且具有add()、delete()元素的方法。 

其实还有一种更加高效的写法,推荐使用Collections集合操作工具类:

List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.add("d");
//[a, b, c, d]
System.out.println(list);

推荐使用最后一种方式实现。

发布了197 篇原创文章 · 获赞 86 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/103689017