看了二哥的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));
這個實現了與原本數組的解耦,新創建了個對象,與原本的數據沒有關系了,所以這樣可以進行增刪操作。