遍历ArrayList删除元素

本文深入探讨了在Java中使用迭代器对ArrayList进行删除操作时可能遇到的ConcurrentModificationException异常,解释了数据共享出错的原因,并给出了正确的实现方式。文章通过对比错误示范与改正后的代码,强调了在遍历过程中修改集合时使用迭代器的重要性。
记录一下
/*
*   使用迭代器对ArrayList进行删除操作时会报ConcurrentModificationException
*   数据共享出错
*   增强for循环只能取出ArrayLiat中元素,不能进行增删改操作
*   还是得用迭代器233
* */
错误示范
for (Student student : arr) {
    Number = student.number;
    System.out.println(Number.indexOf(number));
    if(Number.indexOf(number) < 0) {
        arr.remove((Student)student);
    }
}
改正后
Iterator<Student> iterator = arr.iterator();
while(iterator.hasNext()) {
    Number = iterator.next().number;
    if(Number.indexOf(number) < 0) {
        iterator.remove();
    }
}

 

 

```java import java.util.ArrayList; import java.util.Iterator; public class IterateArrayListWithIterator { /** * 使用 Iterator 遍历 ArrayList 集合 * @param list 要遍历ArrayList 集合 */ public static void iterateWithIterator(ArrayList<String> list) { // 判断集合是否为 null 或空 if (list == null || list.isEmpty()) { System.out.println("列表为空或未初始化"); return; } // 获取迭代器对象 Iterator<String> iterator = list.iterator(); // 使用 while 循环遍历 System.out.println("=== 使用 Iterator 遍历 ArrayList ==="); while (iterator.hasNext()) { // 检查是否还有下一个元素 String element = iterator.next(); // 获取下一个元素 System.out.println(element); } } // 示例 main 方法用于测试 public static void main(String[] args) { ArrayList<String> myList = new ArrayList<>(); myList.add("apple"); myList.add("banana"); myList.add("cherry"); iterateWithIterator(myList); } } ``` ### 解释: - `iterator()`:调用 `list.iterator()` 获取该集合的迭代器。 - `hasNext()`:返回 `true` 表示还有下一个元素,是循环继续的条件。 - `next()`:返回当前元素,并将指针移动到下一个位置。 - **安全性**:使用 `Iterator` 是线程安全(在单线程中)且推荐的方式,尤其当你可能在遍历删除元素时,应使用 `iterator.remove()`。 ✅ 输出结果: ``` === 使用 Iterator 遍历 ArrayList === apple banana cherry ``` > 💡 提示:如果要在遍历过程中删除元素,可以使用 `iterator.remove()`,而不能直接使用 `list.remove()`,否则会抛出 `ConcurrentModificationException`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值