zoukankan      html  css  js  c++  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

    学习的时间不一定要特定安排
  • 相关阅读:
    java和.NET的比较
    联想笔记本不能无线上网
    js根据给定的日期计算当月有多少天
    jQuery中live()变更
    C#操作xml文件
    SQL server的with的用法(一)
    jquery拖拽实现UI设计组件
    自定义弹出框
    第一个超级简单Node.js实例
    windows 下使用redis
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/10019970.html
Copyright © 2011-2022 走看看