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

使用ListIterator条件修改List结果不符,寻求技术解决方案

问题分析与解决方案

问题根源

你的代码存在两个关键问题:

  1. 打印字符串错误:最后一行输出的文字仍然是"List before modification",导致输出描述不符合预期。
  2. 迭代器位置逻辑错误:当iterator.next()返回"C"时,迭代器的光标处于"C"元素的后方(而非元素所在位置)。此时调用iterator.previous()返回的是"C"而非"B",因此previousElement.equals("B")条件不成立,set("BC")从未执行,最终仅移除了"C",得到[A,B]。

修正后的代码

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

public class TestIterator {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        System.out.println("List before modification: " + list);
        ListIterator<String> iterator = list.listIterator();
        
        while (iterator.hasNext()) {
            String element = iterator.next();
            if (element.equals("C")) {
                // 将光标从C后方移回C的位置
                iterator.previous();
                // 检查是否存在前一个元素(B)
                if (iterator.hasPrevious()) {
                    // 移动到B的位置并获取元素
                    String previousElement = iterator.previous();
                    if (previousElement.equals("B")) {
                        // 将B修改为BC
                        iterator.set("BC");
                    }
                    // 移动回C的位置,为移除操作做准备
                    iterator.next();
                    iterator.next();
                }
                // 移除C元素
                iterator.remove();
            }
        }
        
        // 修正输出描述文字
        System.out.println("List after modification: " + list);
    }
}

逻辑说明

  1. 当遍历到"C"时,先通过iterator.previous()将光标从"C"后方移回"C"所在位置。
  2. 再次调用iterator.previous()移动到"B"的位置,调用set("BC")完成修改。
  3. 通过两次iterator.next()将光标移回"C"后方,调用remove()移除"C"元素。
  4. 修正最后一行的输出文字,确保描述准确。

运行结果

List before modification: [A, B, C]
List after modification: [A, BC]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:55:36