Arrays.asList()的使用

最近在项目中,用到了数组转集合。有个很方便的方法就是 Arrays.asList();但你可能不知道这样得到的List它的长度是不能改变的。

String[] abc = new String[] { "abc", "acd", "add" };
List<String> abcList = Arrays.asList(abc);

abcList.add("123");

没想到执行后却抛出了异常:

java.lang.UnsupportedOperationException

看看asList()方法是怎么实现的。

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

当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,显然它是Arrays类自己定义的一个内部类!这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!

解决方法:

String[] abc = new String[] { "abc", "acd", "add" };
List<String> abcList = new ArrayList<String>(Arrays.asList(abc));

abcList.add("123");

总结:如果你的List只是用来遍历,可以用Arrays.asList()!如果List还要涉及添加或删除元素,还是new一个java.util.ArrayList,然后一个一个的添加元素吧!




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值