今天做项目时遇到一个奇葩的问题,在for循环中删除满足条件的那条记录
代码如下:
for(int i=0;i<list.size();i++) { Map map = (Map) list.get(i); if (!"1".equals(map.get("ywlx"))) { if (!"00".equals(map.get("ywhj")) && !"98".equals(map.get("ywhj")) && !"99".equals(map.get("ywhj"))) { map.put("ywzt", "正在扣款中"); } if("3".equals(map.get("ywlx"))){//满足条件则删除 iterator.remove(); } }
咋一看,可能觉得没问题,但你会发现会有一条数据删不掉的情况,哈哈
那是什么原因呢?首先,list.remove()方法执行后数组会重新计算下标,当你删除掉index为0的记录之后,i之后已经为1了,然后list中index=0的那条记录将不再参与遍历。
解决方法:
1,使用list.itrerotor方法遍历删除
2.将for(int i=0;i<list.size();i++)改为for(int i=list.size()-1;i>=0;--i),让数组的遍历从右向左遍历。