Java中ArrayList边遍历边修改
2024-08-31 14:59:27
用for-each 边遍历ArrayList 边修改时:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
System.out.println(list); for (String s : list) {
if (s.equals("dd")) {
list.remove(s);
}
}
System.out.println(list);
}
会报错
可以改用如下方式:
① 用迭代器 iterator进行遍历删除
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
System.out.println(list); Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
if (next.equals("dd")) {
iterator.remove();
}
}
System.out.println(list);
}
②:使用最原始的 for循环
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
System.out.println(list); for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.equals("dd")) {
list.remove(s);
}
}
System.out.println(list);
}
③:采用jdk8 Collection中新增的方法removeIf (个人推荐,简洁快捷新特性)
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
System.out.println(list); list.removeIf(next -> next.equals("dd"));
System.out.println(list);
}
具体为什么ArrayList不能用 for-each循环去边遍历边删除,有大量科普文章解释,具体不再重复阐述,只记录方法,下面引用一篇个人觉得剖析很彻底的文章
最新文章
- Spring in Action 学习笔记二-DI
- 内核控制Meta标签:让360浏览器默认使用极速模式打开网页(转)
- hyper-v虚拟化管理
- selenium-打开IE浏览器遇到问题记录
- hdoj-2021
- ubuntu知识收集
- C++中复制构造函数与重载赋值操作符总结
- 【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”
- HDU 4635 - Strongly connected(2013MUTC4-1004)(强连通分量)
- 拥抱模块化的JavaScript
- SQL Server Analysis Services 数据挖掘(1)
- centos 6.X 安装node
- 微信小程序开发工具 常用快捷键
- minicom与USB转串口
- UIImageView动画
- winPcap编程之获取适配器详细信息(三)
- TestNG并行测试
- jQuery选择器(基本过滤选择器)第三节
- Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
- Android Camera MSM HAL