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

学习的时间不一定要特定安排
原文地址:https://www.cnblogs.com/zhongzheng123/p/10019970.html