在FOR循环中对LIST循环变量进行REMOVE或ADD操作问题

本文分析了在FOR循环中直接对LIST进行REMOVE或ADD操作可能导致的逻辑错误,原因是删除元素后改变了列表长度,影响索引。为解决此问题,提出了两种解决方案:一是使用Iterator迭代器进行遍历和删除,避免索引问题;二是采用倒序遍历,从后向前删除元素,确保不会漏掉任何元素。这两种方法在循环删除或修改列表时能有效防止错误发生。
摘要由CSDN通过智能技术生成

【问题描述】在FOR循环中对LIST循环变量进行REMOVE或ADD操作问题。

一、案例描述
在循环变量中对LIST对象进行REMOVE或ADD操作,会导致数组长度变更,以致业务逻辑出错。

原因分析】:我们在删除某个元素后,list的大小发生了变化,这时候你的的索引也会发生变化,这时就会导致你在遍历的时候漏掉某些元素。
比如当你删除第1个元素后,我们如果还是继续根据索引访问第2个元素时,因为删除的关系,后面的元素都往前移动了一位,所以实际访问的是第3个元素。所以这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。

//元素删除后list.size()会变 
        IDataset list=new DatasetList();
        for(int i=0;i<list.size();i++)
        {
             If(list.getstring(“DECODE”).equle(true)){
       		 list.remove(i);
}
        }

二、解决方法

【方法一】
方法分析:for循环,Iterator是迭代器,迭代循环一个du集合,Iterator i=code.iterator()调用code的迭代器,i.hasNext()表示迭代器中能否找到集合的下一个值,如果能找到这个值,则执行{String str = ite.next();},把这个值赋给变量str。如果找不到这个值,就跳出循环。

for (Iterator<String> ite = list.iterator(); ite.hasNext();) {
      String str = ite.next();
      System.out.println(str);
      if (str.contains("b")) {
          ite.remove();
      }
}

【方法二】
**方法分析:**倒序遍历,不存在漏掉的

 IDataset list=new DatasetList();
        for(int i=list.size()-1;i>=0;i--)
        {
             If(list.getstring(“DECODE”).equle(true)){
       		 list.remove(i);
}
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值