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

如何利用ListIterator实现Java列表中符合差值规则的缺失元素补充?

嘿,这就帮你搞定这个需求!先上完整的可运行代码,之后我再给你拆解每一步的逻辑:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ArrayListExample {
    public static void main(String[] args) {
        List<Integer> arrayList = new ArrayList<>();
        arrayList.add(20);
        arrayList.add(40);
        arrayList.add(50);
        arrayList.add(70);
        arrayList.add(90);

        // 用ListIterator遍历,能安全在遍历中修改列表
        ListIterator<Integer> iterator = arrayList.listIterator();
        
        while (iterator.hasNext()) {
            Integer current = iterator.next();
            // 先确认还有下一个元素再比较
            if (iterator.hasNext()) {
                Integer nextElement = iterator.next();
                // 检查后一个元素减当前元素是否等于10,要绝对值的话用Math.abs()
                if (nextElement - current == 10) {
                    // 把当前元素加10后插入到当前迭代位置后面
                    iterator.add(current + 10);
                }
                // 把迭代器往回挪一位,不然会跳过下一个要处理的元素
                iterator.previous();
            }
        }

        // 打印处理后的列表看看结果
        System.out.println("处理后的列表:");
        for (Integer num : arrayList) {
            System.out.print(num + " ");
        }
    }
}

关键逻辑说明:

  • 为什么用ListIterator? 要是用普通的for循环或者增强for循环,遍历的时候修改列表很容易抛出ConcurrentModificationException,ListIterator专门支持遍历过程中添加/删除元素,安全得多。
  • 遍历细节:每次先拿当前元素,然后检查有没有下一个元素,有的话取下一个元素做差值判断。满足条件就把current+10插入到当前位置后面。
  • 迭代器回移:因为我们刚才取了下一个元素,要是不移回去,迭代器会直接跳到下下个元素,导致漏处理,所以必须调用previous()挪回来。

运行这段代码,初始列表[20,40,50,70,90]会变成[20,40,50,50,70,90]——因为只有40和50的差值是10,所以添加了40+10=50进去。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:50