数组转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);

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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值