当我们需要对遍历中的list进行remove时,很可能会有个坑在等着我们。

先看一段代码:

String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
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++) {if (((String) list.get(i)).startsWith("abcde")) {list.remove(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=i+1,则刚刚移过来的元素没有被读取。

解决方法:

//1.倒过来遍历list
for (int i = list.size()-1; i >=0; i--) {if (((String) list.get(i)).startsWith("abcde")) {list.remove(i);}
}
//2.每移除一个元素以后再把i移回来
for (int i = 0; i < list.size(); i++) {if (((String) list.get(i)).startsWith("abcde")) {list.remove(i);i = i - 1;}
}
//3.使用iterator.remove()方法删除
for (int i = 0; i < list.size(); i++) {if (((String) list.get(i)).startsWith("abcde")) {list.remove(i);i = i - 1;}
}

JAVA中List遍历时如何正确remove元素相关推荐

  1. java中map怎么遍历,Java中怎么遍历Map的所有的元素

    Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...

  2. java+解析未知json_在Java中解析JSON时如何忽略未知属性– Jackson @JsonIgnoreProperties注释示例...

    java+解析未知json 使用Jackson API在Java中解析JSON时的常见问题之一是,当您的JSON包含未知属性(即您的Java类没有对应于所有JSON属性的所有字段)时,该操作将失败. ...

  3. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  4. java有关线程的说法错误的是_下面关于Java中线程的说法不正确的是( )

    下面关于Java中线程的说法不正确的是( ) 答:调用Thread类的sleep()方法可终止一个线程对象. 从造字角度分析,"河"是形声字,"安"是 字,&q ...

  5. java中Map遍历的三种方式

    Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...

  6. Java中如何遍历HashMap呢?

    转自: Java中如何遍历HashMap呢? 下文讲述java中HashMap遍历的四种方法分享,如下所示: 例: HashMap源数据准备 Map<String, Integer> ma ...

  7. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  8. java 中以||作为split分隔符正确的写法

    java 中以||作为split分隔符正确的写法 今天项目中需要在后台处理前台传递过来的拼接字符串,一开始写成str.split("\||"),得不到正确的结果,通过百度查找发现 ...

  9. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...

    [单选题]对于字符串s="java",下面哪个选项返回字符在字符串中'v'的位置( ). [简答题]汽车核保的主要内容 [判断题]在java中产生子类对象时,直接调用子类的构造方法 ...

最新文章

  1. Stucts应用引起的OutOfMemoryError
  2. angular 管道
  3. Python函数的非固定参数
  4. java虚拟机及加载class文件的原理机制
  5. python3闭包通俗解释_Python|闭包、装饰器,简单的实例,通俗的理解
  6. github代码的提交与下载
  7. C#用正则表达式对IP进行排序
  8. Green Deep Learning:NLP在大模型之外的另一种思路!
  9. 《数学之美》阅读笔记(持续更新……)
  10. Spring整合MyBatis原理之MapperScannerConfigurer(一)
  11. mysql存储引擎分类
  12. 开机LOGO与动画修改
  13. 在线去水印网站_一键去水印工具
  14. Android Studio开发记录
  15. vim的异常退出处理
  16. 一次学会b站视频下载_合并_剪辑,亲测有效~
  17. zwm 2022 纪中集训游记
  18. CSS峰会圆桌论道丨共享产业数字化升级中的安全探索
  19. shell 小米system锁adb_小米Max刷机及ADB操作
  20. 标签超出图像控件c语言,VC++标签控件之图像标签控件

热门文章

  1. WordNet学习_2
  2. 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发
  3. 小储云商城最新PJ版网站源码
  4. 一个banner的设计——字体字形篇
  5. PCA | 特征值和特征向量
  6. 医学四视图-008-增加十字线开关功能,按钮显隐功能
  7. cfe刷机教程 斐讯k3_斐讯K3全版本刷机教程2019-不用降级开telnet拆机TTL
  8. 简历书写,职业规划,学习路线,金三银四,为2021跳槽做好充足准备
  9. Java实现自定义队列和树结构_实现二叉树的层序遍历,说说Java中的队列结构(实现一个Java的队列)...
  10. CG-19 pH值传感器工作原理 用氢离子玻璃电极与参比电极组成原电池,在玻璃膜与被测溶液中氢离子进行离子交换过程中,通过测量电极之间的电位差,来检测溶液中的氢离子浓度,从而测得被测液体的pH值。