JAVA集合源码攻坚战(2)——ListIterator

本文深入解析ListIterator接口,对比Iterator,详细介绍了其独有的方法和游标概念,解释了如何实现双向迭代和元素操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

上一篇主要介绍了java集合框架的一个整体结构,并简单分析了下Iterator接口的源码,接下来分析ListIterator的源码

ListIterator

ListIterator也是一个接口类,继承了Iterator接口,对比于Iterator,它的方法如下:

  • boolean hasNext() // 判断后面是否还有元素
  • E next() // 返回下一个元素
  • boolean hasPrevious() // 判断前面是否还有元素
  • E previous() // 返回上一个元素
  • int nextIndex() // 返回之后调用next()方法返回的那个元素的索引
  • int previousIndex() // 返回之后调用previous()方法返回的那个元素的索引
  • void remove() //移除元素
  • void set(E e) // 用指定的元素替换next或previous方法返回的最后一个元素。 该方法只有在调用了next或previous之后,没有调用remove和add方法的情况下才能调用。
  • void add(E e) // 插入一个指定元素到list中。该元素会插入到调用next方法返回的那个元素之前或者调用previous方法返回的那个元素之后,即是插入到当前游标的前面位置。

ListIterator与Iterator的区别

根据官方文档:

 * An iterator for lists that allows the programmer
 * to traverse the list in either direction, modify
 * the list during iteration, and obtain the iterator's
 * current position in the list. A {@code ListIterator}
 * has no current element; its <I>cursor position</I> always
 * lies between the element that would be returned by a call
 * to {@code previous()} and the element that would be
 * returned by a call to {@code next()}.
 * An iterator for a list of length {@code n} has {@code n+1} possible
 * cursor positions, as illustrated by the carets ({@code ^}) below:
 * <PRE>
 *                      Element(0)   Element(1)   Element(2)   ... Element(n-1)
 * cursor positions:  ^            ^            ^            ^                  ^
 * </PRE>

ListIterator实现了List的从后往前迭代遍历的功能,并且,这里提出了一个游标(cursor)的概念,而且该游标永远指向两个元素之间或在第一个元素前或在最后一个元素后,而不是指向某个具体的元素位置。
由此看出,当集合中有N个元素时,游标可能的位置有N+1个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值