java List对象遍历删除的陷阱

本文探讨了在Java中遍历List并删除元素时常见的错误,详细解释了错误发生的原因,并提供了两种有效的解决方案:倒叙遍历和使用迭代器。通过这两种方法,可以避免在遍历过程中因删除元素导致的下标错位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上错误代码:
for(int i=0;i<listCTable.size();i++){
   Map mapc=listCTable.get(i);
   if(mapc.get("accountid").equals(pid)){
      listB.add(mapc.get("lookupid").toString());
   }else{
      listCTable.remove(i);
   }
}

程序执行异常,返回数据数量异常。

原因remove操作使List内的元素位置发生了变化,而 位置 i 却正常进行累加,就造成  remove掉不该remove的元素。

 

解决的方法有两种:

1.倒叙遍历

     

 for (int i = list.size() - 1; i >= 0; i--) {  

        String str = list.get(i);  

        if (str .equals("accountid")) {  

            list.remove(str); 

        }

}

后续元素的删除不影响未遍历的前面的元素的下标,所以这种方法可行。

2.使用迭代器

 Iterator<String> it = list.iterator();  
 while (it.hasNext()) {  
        String str = it.next();  
        if (str.equals("accountid")) {  
            it.remove();  
        }  
  }  

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值