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));

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

相关推荐
Sylvia-girl5 小时前
IO流~~
java·开发语言
冰暮流星5 小时前
javascript之数组
java·前端·javascript
Re.不晚5 小时前
JAVA进阶之路——无奖问答挑战3
java·开发语言
代码游侠5 小时前
C语言核心概念复习——C语言基础阶段
linux·开发语言·c++·学习
㓗冽6 小时前
60题之内难题分析
开发语言·c++·算法
dingdingfish6 小时前
Bash学习 - 第3章:Basic Shell Features,第5节:Shell Expansions
开发语言·学习·bash
rainbow68896 小时前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源
不倒翁玩偶6 小时前
IDEA导入新的SpringBoot项目没有启动按钮
java·spring boot·intellij-idea
deepxuan6 小时前
Day7--python
开发语言·python
小小小米粒6 小时前
Maven Tools
java