Java中提供了很多集合类,这些集合类的数据结构不一样,因此在存储和遍历时的方式不一样。迭代器抽象出集合类的共有功能,提取判断功能和获取功能,得到接口,这个接口就是迭代器接口。在具体子类中实现迭代器接口中的若干方法(使用内部类实现这若干个方法)。接下来分析迭代器的原理和源码。

首先查看Collection接口的API。

该接口有一个父接口Iterable,该接口中有一个方法:

接口中的这个方法返回类型是Iterator类型的接口。继续查看Iterator接口。有三个方法。

因此,此时的接口体系结构如下:

在此我们可以发现,最终的子类ArrayList要实现最初的Iterable接口,即实现三个抽象方法(还有一个remove()方法)。我们接下来查看ArrayList类的源码:

首先在Iterator()方法中返回了一个 new Itr(),说明返回了一个实现类的对象。上图蓝底标记处,就是这个实现类。在此,我们得出最后的体系结构:

现在,我们可以理解,在

Collection c = new ArrayList();

Iterator it = c.iterator()

这两行代码中,第二行代码的左边是接口,右边是具体类实例对象,再转到第一行,右边是ArrayList的实例,即运行时是ArrayList的实例,因此最终返回的就是ArrayList类中的内部类Itr的实例对象。

以上就是Java迭代器的源码解析,看起来比较复杂,但是熟练地掌握了接口继承体系结果,内部类,多态(编译看左边,运行看右边)等基本知识,就可以理解迭代器这一机制的原理了。

java迭代器原理_Java迭代器的原理及源码解析相关推荐

  1. 云原生服务网格Istio:原理、实践、架构与源码解析

    华为云原生团队600多页的Istio实战精华总结,云原生服务网格Istio:原理.实践.架构与源码解析的电子书. 图书介绍 <云原生服务网格Istio:原理.实践.架构与源码解析>分为原理 ...

  2. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  3. aop实现原理 - JDK动态代理(实例+源码解析)

    动态代理: jdk代理-基于接口代理 通过 类:java.lang.reflect.Proxy 生成动态代理类 实现 接口:InvocationHandler 只能基于接口进行动态代理 代码实现: 1 ...

  4. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...

  5. Java的String为什么不可变?(String源码解析)

    String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...

  6. java线程池_Java 并发编程 线程池源码实战

    作者 | 马启航 杏仁后端工程师.「我头发还多,你们呢?」 一.概述 笔者在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写 ...

  7. java开发愤怒的小鸟_Java实现愤怒的小鸟AngryBirds游戏源码

    [实例简介] Java实现愤怒的小鸟AngryBirds游戏源码,可以直接运行! [实例截图] [核心代码] Java实现愤怒的小鸟AngryBirds游戏源码下载 └── [www.java1234 ...

  8. Java并发编程之AbstractQueuedSynchronizer(AQS)源码解析

    自己一个人随便看看源码学习的心得,分享一下啦,不过我觉得还是建议去买本Java并发编程的书来看会比较好点,毕竟个人的理解有限嘛. 独占锁和共享锁 首先先引入这两个锁的概念: 独占锁即同一时刻只有一个线 ...

  9. 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】

    BeanFactory体系 BeanFactory整体结构体系图 顶层接口-BeanFactory 1.1.描述 1.2.方法解析(15个) 1.2.1.属性 1.2.2.获取bean实例 1.2.3 ...

  10. java射击游戏_Java Swing打猎射击游戏源码

    代码如下 package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; publi ...

最新文章

  1. 首个面向自动驾驶领域的3D点云目标检测教程!(单模态+多模态/数据+代码)
  2. 图像拼接 python c++
  3. 随机接入响应(RAR,即MSG2)发送过程
  4. POJ 1273 (基础最大流) Drainage Ditches
  5. android NDK c++ library
  6. 完全禁用Microsoft Compatibility Telemetry
  7. 《深入理解计算机系统》第七章 链接
  8. Android 系统(253)---O版本,用耳机按键控制FM的修改方法
  9. M - Corporate Identity(多组字符串匹配问题)
  10. java翻转字符串中的单词
  11. uboot在s3c2440上的移植(1)
  12. 快捷键查看Emacs源码
  13. (通用版)salesforce中soql及sosl的伪‘Like’模糊检索
  14. Have Fun with Numbers及循环链表(约瑟夫问题)
  15. Root Pane Container(三)
  16. MATLAB/Simulink系统建模与仿真
  17. 生成函数学习笔记心得
  18. 男朋友智商测试大集结(一):Oracle数据库查询操作练习81题(附答案)
  19. itext7读取pdf 中文_itext7史上最全实战总结
  20. css3立体样式下载按钮

热门文章

  1. 有哪些免费在线压缩图片的方法或工具
  2. 机器学习之算法案例公共自行车使用量预测
  3. DNS 故障诊断及问题分析示例
  4. pyhton二维码生成器2.0
  5. 爱奇艺快手采购量大涨,迅雷云计算业务前景看好
  6. 解决全局优化和离散问题的二进制多宇宙算法
  7. Word2019 自定义设置页码
  8. 解决手机助手与 android sdk 的adb 冲突问题
  9. java面试(多线程)
  10. 车辆转弯角度算法,代码