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

37 篇文章 0 订阅

代码如下:

 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值