首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java listIterator()用.next()和.prev()给出了奇怪的输出

Java的listIterator()方法返回一个列表的列表迭代器,可以用于遍历列表并对其进行修改。listIterator()方法返回的迭代器可以在列表中向前或向后移动,并且可以使用next()方法获取下一个元素,使用prev()方法获取上一个元素。

在使用listIterator()方法时,如果使用next()方法和prev()方法交替调用,可能会导致奇怪的输出。这是因为next()方法返回的是当前位置的下一个元素,而prev()方法返回的是当前位置的上一个元素。当交替调用这两个方法时,迭代器的位置会来回切换,导致输出结果不符合预期。

为了正确使用listIterator()方法,应该根据具体需求选择使用next()方法或prev()方法来遍历列表。如果需要从前往后遍历列表,应该只使用next()方法;如果需要从后往前遍历列表,应该只使用prev()方法。

以下是一个示例代码,展示了如何正确使用listIterator()方法遍历列表:

代码语言:txt
复制
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        ListIterator<String> iterator = list.listIterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

在上述示例中,我们只使用了next()方法来遍历列表,并且输出了列表中的每个元素。这样可以确保输出结果是按照列表的顺序进行的。

对于Java的listIterator()方法,腾讯云没有特定的相关产品或产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 集合系列(四)—— ListIterator 源码分析

现象与问题 add() 方法在迭代器位置前面添加一个新元素 next() 与 previous() 返回越过对象 set() 方法替换next() previous() 方法返回上一个元素...首先我们来分析 LinkedList listIterator() listIterator(int index) 方法获取 ListIterator 迭代器过程。...next.prev 节点 55 * 将处理目标储到 lastReturned 变量中 56 * 然后将当前 next.prev 节点保存起来,用于下一次迭代处理...next() 处理next 节点,返回 next.item previous() 处理next.prev 节点 返回 next.prev.item remove() 处理是 lastReturned...在 github 上建了一个 repository ,Java Core Knowledge Tree,各位看官若是喜欢请个star,以示鼓励,谢谢。

72220
  • java集合源码分析(四):LinkedList「建议收藏」

    这是关于 java 集合类源码第四篇文章。...往期文章: java集合源码分析(一):Collection 与 AbstractCollection java集合源码分析(二):List与AbstractList java集合源码分析(三):ArrayList...forEach 由于 LinkedList 没有重写 forEach()方法,使用 forEach()仍然还是沿用 Iterable 接口提供增强 for 循环实现,实际上编译以后还是迭代器,也就是说...modCount赋成员变量 expectedModCount,因此,在迭代器里调用非迭代器自带结构性操作方法,都会在第二次并发修改检测时候抛出异常。...; } } return -1; } 7.clear LinkedList clear()就是把所有节点引用关系清除,注释的话来说: Clearing all

    39120

    【C++篇】揭开 C++ STL list 容器神秘面纱:从底层设计到高效应用全景解析(附源码)

    _prev _next:分别指向前一个节点后一个节点,便于实现双向链表遍历、插入删除操作。 该结构简单明了,双向链表节点可以方便地进行前向后向操作。...而 list 底层是通过链表结构实现,每个节点在内存中位置并不连续。因此,链表无法像数组一样通过下标随机访问元素。每个节点都通过指针链接到前一个节点(_prev后一个节点(_next)。...0; } 2.5.3 输出: 2 1 3 1 2.5.4 解释: 对于 int 类型节点,我们通过 *it 访问节点值,++it --it 分别实现了前向后向移动。...而 list 底层是双向链表,迭代器不仅需要访问链表节点值,还需要操作链表前驱后继节点(即 _prev _next 指针)。...总结与展望 通过这篇文章,我们从零开始模拟实现了一个 list 容器,并深入剖析了以下几个方面: 双向链表核心数据结构:理解链表节点 _prev _next 指针,以及如何通过它们实现双向遍历。

    7510

    【C++STL】list容器深度剖析及底层实现

    使用begin(),end()返回节点迭代器,是借助迭代器修改,访问数据,所以我们不需要释放。 (2) 类中是否需要写拷贝构造进行深拷贝写赋值拷贝?...begin返回了第一个节点迭代器it,这里就是默认生成拷贝构造,浅拷贝it,那这两个迭代器就指向同一个节点,所以这里默认拷贝构造赋值拷贝就可以了。..._node; Node* prev = cur->_prev; Node* next = cur->_next; prev->_next = next; next->_prev = prev;... const_iterator; // 同一个类模板不同参数会实例化出不同类型 typedef ListIterator iterator; typedef..._node; Node* prev = cur->_prev; Node* next = cur->_next; prev->_next = next; next->_prev

    9710

    jdk源码分析之List--常用实现类分析与对比

    java编码中,集合类算是我们最多,比如HashMap,TreeMap,ArrayList,LinkedList等等,使我们最常用(并发包中实现暂不做分析),按照顶级接口分析,有两种,...中间用到了一些扩容和数组复制方法也都贴了出了,接下来对其逐步详细分解。...Node prev; Node(Node prev, E element, Node next) { this.item = element; this.next = next...linkFirst方法中f暂存首节点first,然后根据入参e新建一个prev指针null,next指针为f节点,然后把新节点赋值first,如果f为null(之前没有元素),last指针也指向新节点...对于前者,仍然只需要新建一个Node改变前后指针指向,而后者会发生数组复制,将原数组所有元素拷贝到自己从第二个位开始,长度为size对应位置,然后将入参赋值0号位置,出了数组复制,还可能出现扩容,

    24520

    Java笔记-Previous方法反向遍历没反应问题

    前言  今天在学习集合分支List特有迭代器ListIterator时遇到两个疑惑,这是第一个,由于角度比较奇怪,教学视频里也没有提及,在度娘一番攀谈交心后,我仍是一知半解,但这么巧是,在第二个疑惑中我找到了它们共通之处...这里先为大家引入一下ListIterator常用方法 E next():返回迭代中下一个元素 boolean hasNext():如果迭代具有更多元素,则返回true E previous():返回列表中上一个元素...hasPrevious()这两个方法,根据方法描述,我们很容易理解为就是 从集合最后一位开始返回前一个元素 以及 从最后一位开始判断前面是否存在元素,于是在测试学习这个方法时我写出了这样代码 以下附上代码及图示..."Java" "World" "Hello" 这三个字符串,可预想事物总是美好,现实是残酷哈哈哈,看如下运行图~ 分析问题  在学习过程中,使用E next()boolean hasNext...()来进行同样操作是可以正常依次输出 "Hello" "World" "Java" 这三个字符串 import java.util.ArrayList; import java.util.List;

    1.3K10

    C++ list链表模拟实现

    上图RefPtr模板分别是传引用传指针,用于应对const 迭代器使用 ,保证const迭代器可以修改迭代器,但不能修改该迭代器指向内容。...;//新节点next指向头节点 newnode->prev = tail;//新节点prev指向之前旧尾节点 _head->prev = newnode;//头节点prev指向新节点...newnode->next = cur;//新节点next指向pos节点 newnode->prev = prev;//新节点prev指向pos前一个节点 cur->prev =..._node;//记录pos位置节点 Node* prev = cur->prev;//记录pos前一个节点 Node* next = cur->next;//记录pos下一个节点...prev->next = cur->next;//pos前一个节点next指向pos下一个节点 next->prev = prev;//pos下一个节点prev指向pos前一个节点

    9510
    领券