欢迎来到代码驿站!

当前位置:首页 >

解决JAVA遍历List集合删除数据时的思考

时间:2020-07-15 22:31:24|栏目:|点击:
一、问题描述

有时候,我们会遇到在遍历List集合的过程中删除数据的情况。
看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下
String str1 = new String("1");
String str2 = new String("2");
String str3 = new String("3");
String str4 = new String("4");
String str5 = new String("5");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());     
 
for (int i = 0; i < list.size(); i++) {        
    list.remove(i);      
  // i--;
  //System.out.println(i+" "+list.get(i)+" ");
}     
System.out.println("after remove:list.size()=" + list.size());

本来预期结果应该是:
list.size()=5 
after remove:list.size()=0 
但实际上结果却是:
list.size()=5 
after remove:list.size()=2
原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 ,此时如果执行i++,则刚刚移过来的元素没有被读取。

分析:
  •     List中有5条数据,需要循环5次,
  •     第一次数据为:1 2 3 4 5
  •     执行完remove(0) 后,数据为 2 3 4 5  , i=1
  •     第二次数据为:2 3 4 5
  •     执行完remove(1) 后,数据为 2 4 5  , i=2
  •     第三次数据为:2 4 5
  •     执行完remove(2) 后,数据为 2 4  , i=3
  •     此时如果加上上面注释的代码 System.out.println(i+" "+list.get(i)+" "); 循环第4、5次时就会出现异常
二、解决方法

解决方法1:每移过一次后,再把 i 移回来
for (int i = 0; i < list.size(); i++) {        
  list.remove(i);      
  i--;       
}
解决方法2:先删除后面的元素
for (int i = list.size()-1; i >= 0; i--) {
  list.remove(i);
}
解决方法3:使用iterator删除
for(Iterator it = list.iterator();it.hasNext();){       
  it.remove();
}
好啦,大家应该明白怎么回事啦!

上一篇:JAVA代码实现MongoDB动态条件之分页查询

栏    目:

下一篇:R语言ggplot2边框背景去除的实现

本文标题:解决JAVA遍历List集合删除数据时的思考

本文地址:http://www.codeinn.net/misctech/2357.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有