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

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

相关推荐
aramae7 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
张某布响丸辣7 小时前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵
YatHinLay8 小时前
Spring Boot + Calcite 实现跨库查询
java
酷炫码神8 小时前
MosMos 创意效果与能力边界展示
java
Wang's Blog8 小时前
Java 接入Redis: 使用Jedis操作Redis
java·服务器·redis
事圆则缓8 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
shehuiyuelaiyuehao8 小时前
算法50,分治归并,数组中的逆序对
java·算法
烽学长8 小时前
(附源码)基于Springboot+vue的图书阅读分享系统的设计与实现
java·spring boot·后端
Ivanqhz9 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
青山木9 小时前
RocketMQ 入门到原理(三):消息存储原理
java·后端·中间件·架构·rocketmq