当前位置:主页 > >

解决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++,则刚刚移过来的元素没有被读取。

分析:
二、解决方法

解决方法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();
}
好啦,大家应该明白怎么回事啦!

您可能感兴趣的文章:

相关文章