gpt4 book ai didi

java集合类arraylist循环中删除特定元素的方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java集合类arraylist循环中删除特定元素的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

一种错误的方式:

java" id="highlighter_670858">
?
1
2
3
4
5
6
7
8
9
<pre name= "code" class = "java" > for ( int i = 0 , len= list.size();i<len;++i){
 
  if (list.get(i)==XXX){
 
     list.remove(i);
 
  }
 
}

 上面这种方式会抛出如下异常:

  。

?
1
2
3
4
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 )

 因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯.

可以对上面的程序进行如下改进:

?
1
2
3
4
5
6
7
8
9
for ( int i = 0 , len= list.size();i<len;++i){
 
  if (list.get(i)==XXX){
 
     list.remove(i);
     --len; //减少一个
  }
 
}

上面的代码就正确了.

下面我们再介绍一种方案:

List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象.

?
1
2
3
4
5
6
7
Iterator<String> sListIterator = list.iterator();
while (sListIterator.hasNext()){
   String e = sListIterator.next();
   if (e.equals( "3" )){
   sListIterator.remove();
   }
}

上面这种也是正确的,并推荐使用第二种方案.

两种方案实现原理都差多的,第二种只是jdk封装了下.

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

以上就是小编为大家带来的java集合类arraylist循环中删除特定元素的方法全部内容了,希望大家多多支持我~ 。

最后此篇关于java集合类arraylist循环中删除特定元素的方法的文章就讲到这里了,如果你想了解更多关于java集合类arraylist循环中删除特定元素的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com