java中循环删除list中元素的方法总结

 更新时间:2016年12月12日 10:26:31   投稿:jingxian  
下面小编就为大家带来一篇java中循环删除list中元素的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。

JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。

1、for循环遍历list

for(int i=0;i<list.size();i++){
  if(list.get(i).equals("del"))
    list.remove(i);
}

这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。

2、增强for循环

for(String x:list){
  if(x.equals("del"))
    list.remove(x);
}

这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。

3、iterator遍历

Iterator<String> it = list.iterator();
while(it.hasNext()){
  String x = it.next();
  if(x.equals("del")){
    it.remove();
  }
}

这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。

总结:

(1)循环删除list中特定一个元素的,可以使用三种方式中的任意一种,但在使用中要注意上面分析的各个问题。

(2)循环删除list中多个元素的,应该使用迭代器iterator方式。

以上这篇java中循环删除list中元素的方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java构建Stream流的多种方式总结

    java构建Stream流的多种方式总结

    Java 8引入了Stream流作为一项新的特性,它是用来处理集合数据的一种函数式编程方式,本文为大家整理了多种java构建Stream流的方式,希望对大家有所帮助
    2023-11-11
  • Mapstruct @Mapper @Mapping 使用小结

    Mapstruct @Mapper @Mapping 使用小结

    这篇文章主要介绍了Mapstruct @Mapper @Mapping使用小结,他们用于各个对象实体间的相互转换,例如数据库底层实体转为页面对象,Model 转为 DTO, DTO 转为其他中间对象, VO 等等,相关转换代码为编译时自动产生的新文件和代码,需要的朋友可以参考下
    2023-09-09
  • MyBatis 使用权威指南

    MyBatis 使用权威指南

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,本文给大家介绍MyBatis 使用指南,一起看看吧
    2017-03-03
  • java web实现网上手机销售系统

    java web实现网上手机销售系统

    这篇文章主要为大家详细介绍了java web实现网上手机销售系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot返回所有接口详细信息的方法详解

    SpringBoot返回所有接口详细信息的方法详解

    这篇文章主要介绍了SpringBoot返回所有接口详细信息的方法,简单来说就是我们通过访问一个接口能看到我们所有的API接口的数量,以及路径和请求方法,文中有详细的代码供大家参考,需要的朋友可以参考下
    2025-04-04
  • spring boot如何使用AOP统一处理web请求

    spring boot如何使用AOP统一处理web请求

    这篇文章主要介绍了spring boot如何使用AOP统一处理web请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • jar包双击执行程序的方法

    jar包双击执行程序的方法

    这篇文章主要介绍了jar包双击执行程序的方法,可实现双击jar包直接执行Java程序的功能,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Java 数据结构与算法系列精讲之字符串暴力匹配

    Java 数据结构与算法系列精讲之字符串暴力匹配

    字符串暴力匹配算法是指在一个长字符串中暴力寻找是否包含某一子串所谓暴力匹配,就是不使用任何其他算法,将两个字符串中的字符一一进行比对
    2022-02-02
  • java 动态加载的实现代码

    java 动态加载的实现代码

    这篇文章主要介绍了java 动态加载的实现代码的相关资料,Java动态加载类主要是为了不改变主程序代码,通过修改配置文件就可以操作不同的对象执行不同的功能,需要的朋友可以参考下
    2017-07-07
  • Resty极简restful框架快速接入Spring

    Resty极简restful框架快速接入Spring

    这篇文章主要为大家介绍了Resty极简的restful框架快速接入Spring详细说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论