Arrays.asList()源码解析--UnsupportedOperationException异常原因

1.asList()

String arr[] = {"a", "b", "c", "d", "e"};
List<String> list = Arrays.asList(arr);

asList方法源码

可以看到这里的 new ArrayList<>(a) 调用的是java.util.Arrays类的一个内部类。

且a=Objects.requireNonNull(array);可以看到list数组是指向arr数组

2.add()、remove()

内部类ArrayList<E>并没有重写add和remove方法,会默认执行父类add和remove方法。

下面是AbstractList<E>add源码

可以看到会抛出UnsupportedOperationException异常

java.lang.UnsupportedOperationException

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)

3.set()

 public static void main(String[] args) {
        String arr[] = {"a", "b", "c", "d", "e"};
        List<String> list = Arrays.asList(arr);
        list.set(0,"a1");
        arrayToString(arr);
        System.out.println("list:"+list.toString());
    }
输出:
[a1,b,c,d,e]
list:[a1, b, c, d, e]

当改动其中一个对象时,另一个也会同时变动。

4.数组转新集合的正确姿势

public static void main(String[] args) {
        String arr[] = {"a", "b", "c", "d", "e"};
        List<String> list = new ArrayList<>(Arrays.asList(arr));
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值