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

Java 7中如何使用Iterator从List<List<Address>>中删除子列表?

在Java 7中遍历并删除List<List<Address>>元素的解决方案

在Java 7里直接用增强for循环遍历List<List<Address>>并删除元素肯定会踩坑——因为增强for循环底层依赖迭代器,但如果直接调用集合的remove()方法,会触发ConcurrentModificationException(并发修改异常)。下面给你两种靠谱的实现方式:

方法一:从后往前的普通for循环

这种方式通过反向遍历集合,避免删除元素后导致的索引错位问题,代码简单直观:

List<List<Address>> addressLists = ...; // 你的目标集合
// 从最后一个元素开始往前遍历
for (int i = addressLists.size() - 1; i >= 0; i--) {
    List<Address> listOfAddress = addressLists.get(i);
    // 执行你的地址处理逻辑
    for (Address address : listOfAddress) {
        // some code
    }
    // 处理完成后删除当前子列表
    addressLists.remove(i);
}

为什么要反向遍历?因为如果从前往后删,删除第i个元素后,后面的元素都会往前挪一位,下一次循环的i++会跳过原本的第i+1个元素;而反向遍历的话,删除的是当前末尾的元素,不会影响前面未遍历的元素索引。

方法二:使用Iterator迭代器(推荐)

这是Java中遍历并修改集合的标准安全方式,迭代器的remove()方法会同步更新迭代器和集合的状态,彻底避免并发修改异常:

List<List<Address>> addressLists = ...; // 你的目标集合
Iterator<List<Address>> iterator = addressLists.iterator();
while (iterator.hasNext()) {
    List<Address> listOfAddress = iterator.next();
    // 执行你的地址处理逻辑
    for (Address address : listOfAddress) {
        // some code
    }
    // 用迭代器的remove方法删除当前元素
    iterator.remove();
}

注意:绝对不要在增强for循环里直接调用addressLists.remove(listOfAddress),这种操作会让迭代器检测到集合结构被修改,立刻抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:40