List在使用迭代器遍历异常情况

在使用迭代器遍历ArrayList时,直接通过集合对象删除元素会导致`ConcurrentModificationException`异常。但通过迭代器自身的`remove()`方法删除元素则不会报错。示例代码展示了如何正确使用迭代器进行遍历并安全删除元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

补充一下ArrayaList中的内容;
注意:千万不然在使用迭代器遍历集合元素的时候利用集合对象删除元素的方法,否则会出现
java.util.ConcurrentModificationException异常,

@Test
public void m5() {
    List Ary = new ArrayList();
    Ary.add(0, "西瓜");//add()方法是无返回值类型的方法
    Ary.add(1, "葡萄");
    Ary.add(2, "柠檬");
    System.out.println("----------测试迭代器报错----------");
    //需要注意的是,不要在使用迭代器遍历集
    // 合元素的同时用集合对象方法去删除元素,否则会报错
    //拿到Ary的迭代器
    Iterator iterator1 = Ary.iterator();
    while (iterator1.hasNext()) {
        Object o = iterator1.next();
        System.out.println("当前元素是:" + o);
        Ary.remove(o);
    }
    System.out.println(Ary.size());
}


以下特殊形式的for循环时一样的异常结果:

```java
System.out.println(Ary.size());
for (Object o:Ary){
    System.out.println(Ary.remove(o));
}
``

在这里插入图片描述

在这里插入图片描述

但是以下方式并没有报错:
@Test
public void m5() {
List Ary = new ArrayList();
Ary.add(0, “西瓜”);//add()方法是无返回值类型的方法
Ary.add(1, “葡萄”);
Ary.add(2, “柠檬”);
System.out.println("----------测试迭代器报错----------");
//需要注意的是,不要在使用迭代器遍历集
// 合元素的同时用集合对象方法去删除元素,否则会报错
//拿到Ary的迭代器
Iterator iterator1 = Ary.iterator();
while (iterator1.hasNext()) {
System.out.println(“当前元素是:” + iterator1.next());
Ary.remove(iterator1.next());
}
System.out.println(Ary.size());
}

在这里插入图片描述
我们可以通过使用:

    //需要注意的是,不要在使用迭代器遍历集
    // 合元素的同时用集合对象方法去删除元素,否则会报错
    //拿到Ary的迭代器
    Iterator iterator1 = Ary.iterator();
    while (iterator1.hasNext()) {
        Object o = iterator1.next();
        System.out.println("当前元素是:" + o);
        iterator1.remove();
    }
    System.out.println(Ary.size());//迭代器可以改变集合中的元素
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值