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

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

相关推荐
笃行客从不躺平几秒前
遇到大SQL怎么处理
java·开发语言·数据库·sql
郝学胜-神的一滴几秒前
Python中常见的内置类型
开发语言·python·程序人生·个人开发
q***87607 分钟前
Spring Boot 整合 Keycloak
java·spring boot·后端
Billow_lamb8 分钟前
Spring Boot2.x.x全局拦截器
java·spring boot·后端
上不如老下不如小19 分钟前
2025年第七届全国高校计算机能力挑战赛初赛 Java组 编程题汇总
java·计算机能力挑战赛
g***B73824 分钟前
Kotlin协程在Android中的使用
android·开发语言·kotlin
火白学安全28 分钟前
《Python红队攻防零基础脚本编写:进阶篇(一)》
开发语言·python·安全·web安全·网络安全·系统安全
爱码小白30 分钟前
PyQt5 QTimer总结
开发语言·qt
泉城老铁35 分钟前
Springboot对接mqtt
java·spring boot·后端
A***279536 分钟前
Kotlin反射机制
android·开发语言·kotlin