【问题描述】在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);
}
}