java.lang.UnsupportedOperationException异常

今天在对list数组进行add或remove操作时抛出了java.lang.UnsupportedOperationException异常
在这里插入图片描述
发现是使用了Arrays工具类的asList方法将数组直接转成List后使用了add()或remove()方法。

原因?


我们先看一下Arrays.asList方法的源码。

在这里插入图片描述
此方法return了一个ArrayList感觉没有问题,但是查看这个ArrayList发现它不是我们熟知的java.util.ArrayList。它是java.util.Arrays.ArrayList。
在这里插入图片描述
它是Arrays自己定义的一个静态内部类,这个内部类没有实现add()和remove()方法,所以是直接使用的父类AbstractList的相应方法。
在这里插入图片描述
然而AbstractList类里的这两个方法是直接抛出java.lang.UnsupportedOperationException异常的
在这里插入图片描述

扩展

String[] arr = new String[]{"Hello","World"};
List list = Arrays.asList(arr);

//1.运行抛出异常
list.add("JavaSE");

//2.list.get(0);会随着操作数组而同步被修改
arr[0] = "Halo";

结论

所以Arrays.asList返回的java.util.Arrays.ArrayList适合用来遍历保存数据。不适合进行插入删除操作。如果还需要进行增删操作还是new一个java.util.ArrayList来使用吧。
Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值