java集合类arraylist循环中删除特定元素的方法
在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。
一种错误的方式:
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){
if(list.get(i)==XXX){
list.remove(i);
}
}
上面这种方式会抛出如下异常:
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)
因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。
可以对上面的程序进行如下改进:
for(int i = 0 , len= list.size();i<len;++i){
if(list.get(i)==XXX){
list.remove(i);
--len;//减少一个
}
}
上面的代码就正确了。
下面我们再介绍一种方案:
List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。
Iterator<String> sListIterator = list.iterator();
while(sListIterator.hasNext()){
String e = sListIterator.next();
if(e.equals("3")){
sListIterator.remove();
}
}
上面这种也是正确的,并推荐使用第二种方案。
两种方案实现原理都差多的,第二种只是jdk封装了下。
查看ArrayList源码会发现很多方法内部都是基于iterator接口实现的,所以推荐使用第二种方案。
以上就是小编为大家带来的java集合类arraylist循环中删除特定元素的方法全部内容了,希望大家多多支持脚本之家~
相关文章
Spring Data JPA关系映射@OneToOne实例解析
这篇文章主要为大家介绍了Spring Data JPA关系映射@OneToOne实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08
RestTemplate如何添加请求头headers和请求体body
这篇文章主要介绍了RestTemplate如何添加请求头headers和请求体body问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07
java的SimpleDateFormat线程不安全的几种解决方案
但我们知道SimpleDateFormat是线程不安全的,处理时要特别小心,要加锁或者不能定义为static,要在方法内new出对象,再进行格式化,本文就介绍了几种方法,感兴趣的可以了解一下2021-08-08
Spring Cloud OpenFeign REST服务客户端原理及用法解析
这篇文章主要介绍了Spring Cloud OpenFeign REST服务客户端原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10
Java Spring MVC 上传下载文件配置及controller方法详解
这篇文章主要介绍了Java Spring MVC 上传下载文件配置及controller方法详解,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下2016-09-09


最新评论