ListIterator是一个功能更加强大的迭代器接口, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。

一、源码解析

public interface ListIterator<E> extends Iterator<E> {//     Query Operations//  以正向遍历列表时,如果列表迭代器有多个元素,则返回trueboolean hasNext();//  返回列表中的下一个元素E next();//   如果以逆向遍历列表集合,列表迭代器有多个元素,则返回trueboolean hasPrevious();//  返回列表集合中前一个元素E previous();//  返回对next的后续调用所返回的元素的索引int nextIndex();//    返回对previous的后续调用所返回元素的索引int previousIndex();//  Modification Operations//   从列表中移除由next或previous返回的最后一个元素void remove();//   用指定元素替换next或者previous返回的最后一个元素void set(E e);//将指定的元素插入列表void add(E e);
}

由以上源码内容可以看出可以ListIterator的特点:

(1)双向移动(向前/向后遍历).

(2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.

(3)可以使用set()方法替换它访问过的最后一个元素.

(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.

二、ListIterator与Iterator的区别

一.相同点

都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。

二.不同点

  • 使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
  • ListIterator有add方法,可以向List中添加对象,而Iterator不能。
  • ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
  • ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
  • 都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。

JDK源码解析之java.util.ListIterator相关推荐

  1. JDK源码解析之Java.util.Collections

    java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例化,就像一个工具类,服务于Java的Collection框架. 一.源码解析 1.不可实例 ...

  2. JDK源码解析之java.util.AbstractCollection

    AbstractCollection类提供了collection的实现类应该具有的基本方法,具有一定的普适性,可以从大局上了解collection实现类的主要功能. java.util.Abstrac ...

  3. JDK源码解析之Java.util.Collection

    Collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素,JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现 一.源码解析 1 ...

  4. JDK源码解析之java.util.Iterator和java.lang.Iterable

    在Java中,我们可以对List集合进行如下几种方式的遍历:第一种就是普通的for循环,第二种为迭代器遍历,第三种是for each循环.后面两种方式涉及到Java中的iterator和iterabl ...

  5. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  6. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  7. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  8. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  9. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

最新文章

  1. HTML 4.01 符号实体
  2. 串行通信的波特率高速和低速区别
  3. union all动态表_深入窥探动态链接
  4. C# Console.ReadLine()方法的使用 以及利用其返回值null终止输入
  5. python面向对象三大基本特性_python面向对象之三大特性
  6. 新盲盒星球抽奖商城手机网站源码 随机开箱抢购
  7. stm32数码管显示实时时间并有闹钟功能
  8. 总结windows下堆溢出的三种利用方式
  9. Java——猜数字游戏
  10. JAVA打印中文乱码问题
  11. 北航计算机学院考研复试,北航计算机学院考研复试-北京航空航天大学计算机学院2015年考研复试方法...
  12. 关于Windows的 “睡眠“ 和 “休眠“
  13. MySql模糊查询like通配符的使用
  14. 计算机制作请柬,婚礼邀请函制作软件免费版
  15. 【WangEditor】使用富文本编辑器 WangEditor 实现用户自定义图片大小(改js源码)
  16. 【目标检测】目标检测的评价指标(七个)
  17. UnityShader-高斯模糊
  18. ios 订阅类收据的服务器处理
  19. S说说镀锌、镀镉、镀铬、镀镍到底有什么不同?
  20. CVPR2022论文速递(2022.4.20)!共13篇!

热门文章

  1. python画海绵宝宝_《1,2,3到动物园》数数书,适合幼儿园小班宝宝亲子共读,从游戏中了解数字的概念...
  2. Scanner进阶详细讲解
  3. mysql邮箱认证_邮件服务系列postfix+sasl+mysql实现用户认证功能
  4. linux kset subsystem 3.10内核,Kobject、Kset 和 Subsystem
  5. 带电检测必要性_接地电阻检测分析的必要性
  6. 做旋转铁甲机器人_「铁甲评测」柳工CLG921E视频全面讲解
  7. html盒子有哪些属性,盒子模型有哪些属性 在html5中哪些元素具有盒子模型
  8. 《软件需求分析(第二版)》第 13 章——需求开发面临的特殊难题 重点部分总结
  9. php生成不重复时间戳,PHP获取时间戳和微秒数以及生成唯一ID
  10. matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究