如何利用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
相关产品推荐
相关产品推荐

