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

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

相关推荐
He_k2 小时前
‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry
开发语言·javascript·ecmascript
星夜9822 小时前
C++回顾 Day6
开发语言·数据结构·c++·算法
琢磨先生David3 小时前
责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)
java·设计模式·责任链模式
UpUpUp……4 小时前
C++复习
开发语言·c++·笔记
-曾牛4 小时前
使用Spring AI集成Perplexity AI实现智能对话(详细配置指南)
java·人工智能·后端·spring·llm·大模型应用·springai
Xiao Ling.4 小时前
设计模式学习笔记
java
MyikJ4 小时前
Java面试:从Spring Boot到分布式系统的技术探讨
java·大数据·spring boot·面试·分布式系统
艾莉丝努力练剑4 小时前
深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
c语言·开发语言·汇编·学习
louisgeek5 小时前
Java 插入排序之希尔排序
java
小兵张健5 小时前
用户、资金库表和架构设计
java·后端·架构