ArrayList使用迭代器在遍历的时候,调用remove方法会不会报错

本文探讨了在非并发和并发情况下,ArrayList使用迭代器遍历元素时调用remove方法的行为。非并发时,调用remove方法前会报错,之后则不会。并发时,无论何时调用remove方法都可能引发错误。解决方案包括禁止遍历期间的增删操作或在增删后使遍历报错,Java采取了后者,通过fail-fast机制抛出异常。
摘要由CSDN通过智能技术生成

ArrayList使用迭代器在遍历的时候,调用remove方法会不会报错

一、说明

在开发中,经常使用ArrayList的迭代器进行遍历元素,例如:

        ArrayList<String> list = new ArrayList<>(Arrays.asList("aa", "bb", "cc"));
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
   
            System.out.println(iterator.next());
        }

思考:在上面的迭代中,如果调用remove()方法,会不会报错?

作者已经通过阅读源代码(java version “1.8.0_281”),先给出结论:

  • 非并发情况下,在调用next()方法之前调用remove()方法会报错;
  • 非并发情况下,在调用next()方法之后调用remove()方法不会报错;
  • 并发情况下,在调用next()方法之后调用remove()方法也会报错;

下面进行分析。

类名.this :内部(可以是匿名内部类)类调用外部类的对象时使用,即在内部类中使用时:外部类对象是外部类名.this,内部类对象则是this。

二、ArrayList迭代器中的remove()方法的作用

ArrayList迭代器中的remove() 方法,可以用于删除迭代过程中的上一次迭代的元素。因此,在非并发情况下,在调用next()方法之后调用remove()方法不会报错。

它只能删除游标指向的前一个元素,而且一个 next() 函数之后,只能跟着最多一个 remove() 操作,多次调用 remove() 操作会报错

    private void listDemo() {
   
        ArrayList
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值