Java集合类ArrayList循环中删除特定元素

mac2022-06-30  20

 

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。

一种错误的方式: [java]  view plain  copy   for(int i = 0 , len= list.size();i<len;++i){    if(list.get(i)==XXX){         list.remove(i);    }  }   上面这种方式会抛出如下异常: [java]  view plain  copy   Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3      at java.util.ArrayList.RangeCheck(Unknown Source)      at java.util.ArrayList.get(Unknown Source)      at ListDemo.main(ListDemo.java:20)   因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。可以对上面的程序进行如下改进: [java]  view plain  copy   for(int i = 0 , len= list.size();i<len;++i){    if(list.get(i)==XXX){         list.remove(i);         --len;//减少一个         --i;//多谢deny_guoshou指正,如果不加会出现评论1楼所说的情况。   }  }   上面的代码就正确了。下面我们再介绍一种方案:List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。 [java]  view plain  copy   Iterator<String> sListIterator = list.iterator();  while(sListIterator.hasNext()){      String e = sListIterator.next();      if(e.equals("3")){      sListIterator.remove();      }  }   上面这种也是正确的,并推荐使用第二种方案。两种方案实现原理都差多的,第二种只是jdk封装了下。

查看ArrayList源码会发现很多方法内部都是基于iterator接口实现的,所以推荐使用第二种方案。

 

转载于:https://www.cnblogs.com/huang-dayu/p/8111477.html

相关资源:java集合类arraylist循环中删除特定元素的方法
最新回复(0)