Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException

看了二哥的foreach陷阱后,自己也遇见了需要循环删除元素的情况,立马想到了当时自己阴差阳错的避开所有坑的解决方式:先倒序遍历,再删除。之前好使,但是这次不好使了,报错Caused by: java.lang.UnsupportedOperationException。

阿里面试官:为什么Java开发手册强制不要在 foreach 里进行元素删除? | 二哥的Java进阶之路

这次的代码为:

复制代码
Object[] fields = aaaa.getFields();
List<Object> list = Arrays.asList(fields);
for(int i = list.size()-1; i >= 0; i--){
    if (cccc.contains(String.valueOf(i))){
        list.remove(i);
    }
}

根据包含的下标来删除元素的循环。

查询元宝后得知:Arrays.asList(fields); 是对原本的数组进行操作,而原本的数组只支持读,改,不支持结构性修改,比如使用list的add或者remove。

解决方式:使用new ArrayList<>();包裹一层就可以了。

复制代码
List<Object> list = new ArrayList<>(Arrays.asList(fields));

这个实现了与原本数组的解耦,新创建了个对象,与原本的数据没有关系了,所以这样可以进行增删操作。

相关推荐
大飞pkz11 分钟前
【设计模式】六大基本原则
开发语言·设计模式·c#·六大原则
iCxhust1 小时前
Intel8259汇编串口接收转C语言
c语言·开发语言·汇编
掘根1 小时前
【Qt】布局管理器
开发语言·qt
半夏知半秋2 小时前
skynet-socket.lua源码分析
服务器·开发语言·学习·架构·lua
2401_841495642 小时前
【数据结构】红黑树的基本操作
java·数据结构·c++·python·算法·红黑树·二叉搜索树
西猫雷婶2 小时前
random.shuffle()函数随机打乱数据
开发语言·pytorch·python·学习·算法·线性回归·numpy
学编程的小鬼2 小时前
SpringBoot 自动装配原理剖析
java·spring boot·后端
来生硬件工程师3 小时前
CH582 GPIO
c语言·开发语言·单片机
fly-phantomWing3 小时前
在命令提示符页面中用pip命令行安装Python第三方库的详细步骤
开发语言·python·pip
VBA63373 小时前
VBA数据库解决方案第二十三讲:向一个已有数据表中添加数据记录
开发语言