1. 程式人生 > >java 在迴圈中刪除陣列元素之二

java 在迴圈中刪除陣列元素之二

  刪除陣列中的某些元素,需要注意刪除後,整個資料的大小會變化。如果以元素下標刪除就會出錯。

錯誤示範:

 
 
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