JAVA中List遍历时如何正确remove元素
当我们需要对遍历中的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元素相关推荐
- java中map怎么遍历,Java中怎么遍历Map的所有的元素
Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...
- java+解析未知json_在Java中解析JSON时如何忽略未知属性– Jackson @JsonIgnoreProperties注释示例...
java+解析未知json 使用Jackson API在Java中解析JSON时的常见问题之一是,当您的JSON包含未知属性(即您的Java类没有对应于所有JSON属性的所有字段)时,该操作将失败. ...
- java中Map遍历的四种方式
java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...
- java有关线程的说法错误的是_下面关于Java中线程的说法不正确的是( )
下面关于Java中线程的说法不正确的是( ) 答:调用Thread类的sleep()方法可终止一个线程对象. 从造字角度分析,"河"是形声字,"安"是 字,&q ...
- java中Map遍历的三种方式
Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...
- Java中如何遍历HashMap呢?
转自: Java中如何遍历HashMap呢? 下文讲述java中HashMap遍历的四种方法分享,如下所示: 例: HashMap源数据准备 Map<String, Integer> ma ...
- Java中HashMap遍历的两种方式
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...
- java 中以||作为split分隔符正确的写法
java 中以||作为split分隔符正确的写法 今天项目中需要在后台处理前台传递过来的拼接字符串,一开始写成str.split("\||"),得不到正确的结果,通过百度查找发现 ...
- java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...
[单选题]对于字符串s="java",下面哪个选项返回字符在字符串中'v'的位置( ). [简答题]汽车核保的主要内容 [判断题]在java中产生子类对象时,直接调用子类的构造方法 ...
最新文章
- Stucts应用引起的OutOfMemoryError
- angular 管道
- Python函数的非固定参数
- java虚拟机及加载class文件的原理机制
- python3闭包通俗解释_Python|闭包、装饰器,简单的实例,通俗的理解
- github代码的提交与下载
- C#用正则表达式对IP进行排序
- Green Deep Learning:NLP在大模型之外的另一种思路!
- 《数学之美》阅读笔记(持续更新……)
- Spring整合MyBatis原理之MapperScannerConfigurer(一)
- mysql存储引擎分类
- 开机LOGO与动画修改
- 在线去水印网站_一键去水印工具
- Android Studio开发记录
- vim的异常退出处理
- 一次学会b站视频下载_合并_剪辑,亲测有效~
- zwm 2022 纪中集训游记
- CSS峰会圆桌论道丨共享产业数字化升级中的安全探索
- shell 小米system锁adb_小米Max刷机及ADB操作
- 标签超出图像控件c语言,VC++标签控件之图像标签控件
热门文章
- WordNet学习_2
- 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发
- 小储云商城最新PJ版网站源码
- 一个banner的设计——字体字形篇
- PCA | 特征值和特征向量
- 医学四视图-008-增加十字线开关功能,按钮显隐功能
- cfe刷机教程 斐讯k3_斐讯K3全版本刷机教程2019-不用降级开telnet拆机TTL
- 简历书写,职业规划,学习路线,金三银四,为2021跳槽做好充足准备
- Java实现自定义队列和树结构_实现二叉树的层序遍历,说说Java中的队列结构(实现一个Java的队列)...
- CG-19 pH值传感器工作原理 用氢离子玻璃电极与参比电极组成原电池,在玻璃膜与被测溶液中氢离子进行离子交换过程中,通过测量电极之间的电位差,来检测溶液中的氢离子浓度,从而测得被测液体的pH值。