list中移除元素:用remove(i)方法遇到的坑以及替代方法

代码如下:

 for (int i = 0; i < organDtos.size(); i++) {
            if(organDtos.get(i)!=null && organDtos.get(i).getParentId()!=0){
                **organDtos.remove(i);**
            }
          }

用这个办法会遇到以下坑:
我数据库中有符合条件的三条数据,顺序依次是:id为4,5,6
第一次循环:i=0,此时id=5的数据符合条件,从list中移除此元素。
需要注意的点是:此时list的元素位置发生了变化,id为5本来这条在i=1的位置的数据,因为i=0的位置上没有了数据,它自动跑到了i=0的位置,后面的数据也依次跟着往前排了。
第二次循环:i=1,此时在i=1的位置的数据是i=6这条数据,符合条件,所以这条数据也从list中移除了。
此时就发现:id=5这条数据因为自动往前移被跳过了,所以即使符合条件,因为没循环到这条数据,也从list中移除不了了。

所以替代方法是:
用迭代器:

     for (int i = 0; i < organDtos.size(); i++) {
            // 获取迭代器
            Iterator<OrganDto> it = organDtos.iterator();
            while(it.hasNext()){
                OrganDto str = it.next();
                if(str!= null && str.getParentId() != 0){
                    it.remove();
                }
            }
        }

参考博文地址如下:
https://blog.csdn.net/zhaozuhao110/article/details/88116831

猜你喜欢

转载自blog.csdn.net/weixin_43228497/article/details/117514780