You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迭代列表时使用Iterator移除元素抛出异常求助

解决Iterator遍历移除元素触发异常的问题

嘿,我来帮你搞定这个问题!这种异常大概率是ConcurrentModificationException,最常见的原因就是你在迭代过程中直接调用了列表本身的remove()方法,而不是用Iterator自带的remove()。

错误示例(会触发异常)

比如你可能写了这样的代码:

List<String> myList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
Iterator<String> it = myList.iterator();

while (it.hasNext()) {
    String element = it.next();
    if (element.equals("banana")) {
        myList.remove(element); // 这里错了!直接操作列表本身
    }
}

为什么会报错?因为Iterator内部维护了一个和集合同步的修改计数器,当你直接调用集合的remove()时,计数器就不一致了,Iterator就会抛出异常来提醒你并发修改的问题。

正确的写法(用Iterator的remove())

把上面的代码改成用Iterator自带的remove()方法就没问题了:

List<String> myList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
Iterator<String> it = myList.iterator();

while (it.hasNext()) {
    String element = it.next();
    if (element.equals("banana")) {
        it.remove(); // 用迭代器的remove方法,安全移除当前元素
    }
}

这个方法会在移除元素的同时,同步更新Iterator内部的计数器,不会触发异常。

还要注意两个坑

  • 调用remove()前必须先调用next():如果还没调用next()就直接调用it.remove(),会抛出IllegalStateException,因为Iterator不知道要移除哪个元素。
  • 每次next()只能调用一次remove():同一个元素不能连续调用两次it.remove(),同样会触发IllegalStateException。

如果你的代码已经用了Iterator的remove()还是报错,可以把你的代码片段贴出来,我再帮你仔细排查~

内容的提问来源于stack exchange,提问作者user3213490

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:15:06