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

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

相关推荐
渣哥3 分钟前
有一天,我和 CopyOnWriteArrayList 杯“线程安全”的咖啡
java
叽哥10 分钟前
Kotlin学习第 3 课:Kotlin 流程控制:掌握逻辑分支与循环的艺术
android·java·kotlin
杨杨杨大侠11 分钟前
第5章:实现Spring Boot集成
java·github·eventbus
华仔啊13 分钟前
工作5年没碰过分布式锁,是我太菜还是公司太稳?网友:太真实了!
java·后端
尚久龙17 分钟前
安卓学习 之 图片控件和图片按钮
android·java·学习·手机·android studio·安卓
摸鱼仙人~19 分钟前
深入理解 MyBatis-Plus 的 `BaseMapper`
java·开发语言·mybatis
杨杨杨大侠20 分钟前
第6章:高级特性与性能优化
java·github·eventbus
Dcs43 分钟前
代码评审还能更好!
java
ITKEY_1 小时前
flutter日期选择国际化支持
开发语言·javascript·flutter
刃神太酷啦1 小时前
C++ 异常处理机制:从基础到实践的全面解析----《Hello C++ Wrold!》(20)--(C/C++)
java·c语言·开发语言·c++·qt·算法·leetcode