Arrays.asList将数组转换成集合,不可进行add和remove操作的原因

问题:

Arrays.asList将数组转换成集合,不可进行add,addAll和remove操作:

    public static void main(String[] args) {
        List<String> strings = Arrays.asList("dddd", "dsad", "dsawe", "11111");
        strings.add("a");
        List strings1 = Arrays.asList("457", "999");
        strings.addAll(strings1);
        System.out.println(strings1.toString());
    }

在这里插入图片描述

原因:

查看源码:
在这里插入图片描述
继续往下查看:
在这里插入图片描述

new了一个ArrayList集合,注意了,这个可不是ArrayList类,而是Arrays里面的一个静态内部类;而该ArrayList类中并无add,remove等方法;

查看父类AbstractList源码:
在这里插入图片描述
发现当调用add,remove等方法时会走到父类的方法中,直接抛出异常!

结论:

用asList转换的代码是返回List的实现类ArrayList集合对象;但是集合大小固定,无法添加和删除。

解决办法:

将数组转换成一个可以具有正常添加和删除操作的List即可
比如:直接new ArrayList<…>(Arrays.asList(a))放入另一个ArrayList

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>(Arrays.asList("dddd", "dsad", "dsawe", "11111"));
        strings.add("a");
        List strings1 = Arrays.asList("457", "999");
        strings.addAll(strings1);
        System.out.println(strings.toString());
    }

也可以新建一个new ArrayList<>(),使用Collections.addAll(list, strings)或是for循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值