使用ListIterator条件修改List结果不符,寻求技术解决方案
问题分析与解决方案
问题根源
你的代码存在两个关键问题:
- 打印字符串错误:最后一行输出的文字仍然是
"List before modification",导致输出描述不符合预期。 - 迭代器位置逻辑错误:当
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); } }
逻辑说明
- 当遍历到
"C"时,先通过iterator.previous()将光标从"C"后方移回"C"所在位置。 - 再次调用
iterator.previous()移动到"B"的位置,调用set("BC")完成修改。 - 通过两次
iterator.next()将光标移回"C"后方,调用remove()移除"C"元素。 - 修正最后一行的输出文字,确保描述准确。
运行结果
List before modification: [A, B, C] List after modification: [A, BC]
内容的提问来源于stack exchange,提问作者xzhou
相关产品推荐
相关产品推荐

