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

如何通过ListIterator在ArrayList子列表的指定元素后添加新元素?

正确实现方案及关键说明

其实你的代码思路已经没问题了,只需要补全add()方法的调用即可,下面是完整的可运行代码,同时我会帮你理清几个容易踩坑的点:

public static void add(List<String> list) {
    // 获取子列表,对应原列表索引2(包含)到7(不包含)的元素
    List<String> subList = list.subList(2, 7);
    ListIterator<String> listIterator = subList.listIterator();
    
    while (listIterator.hasNext()) {
        String value = listIterator.next();
        if (value.equals("400")) {
            // 在这里直接调用add方法插入元素399
            listIterator.add("399");
        }
    }
}

几个核心要点你得知道:

  • ListIterator的add()行为:当你用next()拿到"400"后,迭代器的光标会停在"400"和下一个元素"500"之间,此时调用add("399"),元素会被插入到光标之前的位置——也就是"400"的后面、"500"的前面。最终子列表会变成["200", "300", "400", "399", "500", "600"]。
  • subList是原列表的视图:别以为子列表是独立的副本!对子列表的任何修改(包括通过迭代器添加元素)都会直接同步到原ArrayList中。反过来,如果在子列表存在期间,你直接修改原列表(比如调用原列表的add()/remove()),再操作子列表就会抛出ConcurrentModificationException,这点一定要注意。
  • 为什么必须用ListIterator:普通的Iterator只有remove()方法,没有add()能力,所以这里必须用ListIterator才能实现插入操作。另外,如果你直接用subList.add("399")而不是迭代器的add(),在遍历过程中这么做会触发并发修改异常,因为迭代器会检测到列表被外部修改了。

举个测试的例子,你可以这么验证:

public static void main(String[] args) {
    List<String> mainList = new ArrayList<>(Arrays.asList("0", "100", "200", "300", "400", "500", "600", "700", "800"));
    add(mainList);
    System.out.println(mainList);
    // 输出结果会是:[0, 100, 200, 300, 400, 399, 500, 600, 700, 800]
}

内容的提问来源于stack exchange,提问作者Farhan stands with Palestine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:11:46