java 在迴圈中刪除陣列元素之二
阿新 • • 發佈:2018-11-26
刪除陣列中的某些元素,需要注意刪除後,整個資料的大小會變化。如果以元素下標刪除就會出錯。
錯誤示範:
private JSONArray removeOther(JSONArray productList) {
if (CollectionUtils.isNotEmpty(productList)) {
//陣列刪除必須防止刪除後與邊界問題
for (int i = 0; i < productList.size(); i--) {
String riskPageType = productList.getJSONObject(i).getString("riskPageType");
boolean remove = true;
for (String product : productS) {
if (product.equals(riskPageType)) {
remove = false;
break;
}
}
if (remove) {
productList.remove(i);
} else {
//防止前端誤解,刪除departmentCode
productList.getJSONObject(i).remove("departmentCode");
}
}
}
return productList;
}
那麼,我重新new一個數組,將原來的資料複製到新陣列中,總可以吧。但是似乎有點浪費記憶體,大規模資料或者請求的時候就不適合了。換個思路:既然資料index會變小。那麼我重後遍歷並刪除,這樣就可以了吧
private JSONArray removeOther(JSONArray productList) { //陣列刪除必須防止刪除後與邊界問題 for (int i = 0; i < productList.size(); i--) { String riskPageType= productList.getJSONObject(i).getString("riskPageType"); boolean remove = true; for (String product : productS) { if (product.equals(riskPageType)) { remove = false; break; } }if (remove) { productList.remove(i); } } return productList; }
還有一種方式就是把List陣列變成將陣列轉換為Iterator<> 並且應用Iterator的刪除方法,Iterator.remove
參考之前
https://www.cnblogs.com/zhongzheng123/p/5820755.html