import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* ArrayList如何在遍历的同时删除元素
*/
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7));
Iterator<Integer> iterator = list.iterator();
/* 1. 可以使用迭代器遍历的同时,使用iterator.remove()删除元素不会有问题(原理和2差不多)
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next % 2 == 0) {
iterator.remove();
}
}
/* 2. 可以使用索引遍历的同时,通过索引删除元素,但是要注意通过索引删除元素后,list的size和后续元素的索引会动态变化,所以索引也要跟着变化
for (int i = 0; i < list.size(); i++) {
if(list.get(i)%2==0){
list.remove(i);
i--; // 索引要动态变化,不能一味增加
}
}
*/
/* 3. 不能通过迭代器遍历元素时,使用 list.remove(next)来删除元素 (原因:https://blog.csdn.net/sukier_JE/article/details/79898892)
while (iterator.hasNext()) {
Integer next=iterator.next();
if(next%2==0){
list.remove(next); // java.util.ConcurrentModificationException
}
}
*/
/* 4. 单纯通过索引删除会导致跳过一些元素
for (int i = 0; i < list.size(); i++) {
Integer remove = list.remove(i); // 不能单纯通过索引删除元素,因为list的元素下标是在不停变化的
}
*/
// 5. 使用removeIf()方法来删除
// list.removeIf(i -> (i & 1) == 1);
System.out.println(list);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律