谈谈Java中的Iterator

摘要

  1. Iterator的作用?
  2. IteratorEnumeration的区别?
  3. IteratorListIterator的区别?
  4. Iteratorforeach的关联?

Iterator的作用

Iterator,中文译作迭代器,是一种检查容器内元素并遍历元素的数据类型。它能使使用者不必关心遍历元素的过程,统一了对元素的访问方式。

在JDK1.8中,Iterator接口包含下面这些方法:

//是否有下个元素
boolean hasNext();
//获取下个元素
E next();
//移除迭代器当前指向的元素,这个功能不强制实现,可以抛出UnsupportedOperationException异常
void remove();
//每个元素作为参数传递给Consumer接口的accept
void forEachRemaining(Consumer<? super E> action);

Iterator和Enumeration的区别

Iterator是JDK1.2后才出现的接口,目的是为了取代Enumeration。

Enumeration的作用和Iterator相似,它包含下面的方法:

//是否存在更多元素
boolean hasMoreElements();
//获取下一个元素
E nextElement();

Iterator:

  • 简化了方法名称
  • 增加了移除元素的操作

Iterator和ListIterator的区别

List接口中有一个方法listIterator()用于返回一个List迭代器,ArrayList在内部类中实现了这个迭代器,调用listIterator()时通过构造方法构造出一个ListIterator对象并返回。

那么Iterator和ListIterator有什么区别呢?

ListIterator是Iterator的扩充

ListIterator接口中除了继承自Iterator中的方法,还有:

//是否有上一个元素
boolean hasPrevious();
//获取上一个元素
E previous();
//下一个元素的index
int nextIndex();
//上一个元素的index
int previousIndex();
//用一个元素替换当前指向的元素
void set(E e);
//在当前位置插入一个元素
void add(E e);

Iteratorforeach的关联?

foreach只支持数组或实现了Iterable接口的类。

Iterable接口强制要求实现iterator()方法,也就是说,foreach语句底层还是通过iterator的遍历实现的。

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/%e8%b0%88%e8%b0%88java%e4%b8%ad%e7%9a%84iterator/

(0)
彭晨涛彭晨涛管理者
上一篇 2019年12月5日
下一篇 2019年12月9日

相关推荐

  • NIO零拷贝与其系统函数调用

    本文参考资源: Java NIO学习笔记四(零拷贝详解)Java拿笔小星的博客-CSDN博客 关于Buffer和Channel的注意事项和细节 ByteBuffer不止可以存取by…

    2020年3月14日
    0540
  • 深入理解java虚拟机第三版读书笔记07

    附: Java虚拟机规范-Java虚拟机指令集:JDK8 Java虚拟机规范-Java虚拟机指令集:JDK13 续深入理解java虚拟机第三版读书笔记06 字节码指令简介 Java…

    Java 2020年1月21日
    0230
  • Java多线程基础

    多线程应用 异步调用 以调用方角度来讲,如果+ 需要等待结果返回,才能继续运行就是同步+ 不需要等待结果返回,就能继续运行就是异步 同步在多线程中还有另外一个意思,是让多个线程步调…

    2020年1月31日
    0350
  • Java基础查缺补漏05

    继续我的复习刷题 可以有和类名同名的函数 题目: JAVA中,下列语句哪一个正确() A. class中的constructor不可省略B. constructor必须与class…

    Java 2020年5月29日
    0140
  • 数据库理论之OLTP与OLAP

    OLTP OLTP 即联机事务处理,就是我们经常说的关系数据库,意即记录即时的增、删、改、查,就是我们经常应用的东西,主要供基层人员使用,进行一线业务操作,这是数据库的基础。 对于…

    项目/编程理论 2020年2月16日
    0310
  • 深入理解java虚拟机第三版读书笔记03

    续深入理解java虚拟机第三版读书笔记02 HotSpot虚拟机对象探秘 对象的创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一…

    2020年1月6日
    0150
  • HashMap源码分析

    HashMap是java中非常常见的一个数据结构,在这篇文章里,我依然以Map中的操作为导向来循序渐进研究HashMap中的源码,阅读这篇文章需要的前置知识有: 弱平衡的二叉查找树…

    Java 2020年2月12日
    0240
  • 深入理解java虚拟机第三版读书笔记06

    附: Java虚拟机规范-Class文件格式:JDK8 Java虚拟机规范-Class文件格式:JDK13 以下是第六章 类文件结构的内容 Class类文件的结构 Class文件是…

    Java 2020年1月18日
    0180
  • Java日志框架JUL和Log4j介绍

    日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。 日志实现:JUL、logback、log4j、l…

    2020年2月14日
    0320
  • 详解Java中的四种引用及其应用

    本文参考资源: 深入理解Java中的引用(一)——Reference - 简书 深入理解Java中的引用(二)——强软弱虚引用 - 简书 深入理解Java中的引用(三)——Dire…

    2020年2月14日
    0220

发表回复

登录后才能评论