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));
这个实现了与原本数组的解耦,新创建了个对象,与原本的数据没有关系了,所以这样可以进行增删操作。