java迭代器原理_Java迭代器的原理及源码解析
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迭代器的原理及源码解析相关推荐
- 云原生服务网格Istio:原理、实践、架构与源码解析
华为云原生团队600多页的Istio实战精华总结,云原生服务网格Istio:原理.实践.架构与源码解析的电子书. 图书介绍 <云原生服务网格Istio:原理.实践.架构与源码解析>分为原理 ...
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
转载自 Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...
- aop实现原理 - JDK动态代理(实例+源码解析)
动态代理: jdk代理-基于接口代理 通过 类:java.lang.reflect.Proxy 生成动态代理类 实现 接口:InvocationHandler 只能基于接口进行动态代理 代码实现: 1 ...
- Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例
概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...
- Java的String为什么不可变?(String源码解析)
String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...
- java线程池_Java 并发编程 线程池源码实战
作者 | 马启航 杏仁后端工程师.「我头发还多,你们呢?」 一.概述 笔者在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写 ...
- java开发愤怒的小鸟_Java实现愤怒的小鸟AngryBirds游戏源码
[实例简介] Java实现愤怒的小鸟AngryBirds游戏源码,可以直接运行! [实例截图] [核心代码] Java实现愤怒的小鸟AngryBirds游戏源码下载 └── [www.java1234 ...
- Java并发编程之AbstractQueuedSynchronizer(AQS)源码解析
自己一个人随便看看源码学习的心得,分享一下啦,不过我觉得还是建议去买本Java并发编程的书来看会比较好点,毕竟个人的理解有限嘛. 独占锁和共享锁 首先先引入这两个锁的概念: 独占锁即同一时刻只有一个线 ...
- 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】
BeanFactory体系 BeanFactory整体结构体系图 顶层接口-BeanFactory 1.1.描述 1.2.方法解析(15个) 1.2.1.属性 1.2.2.获取bean实例 1.2.3 ...
- java射击游戏_Java Swing打猎射击游戏源码
代码如下 package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; publi ...
最新文章
- 首个面向自动驾驶领域的3D点云目标检测教程!(单模态+多模态/数据+代码)
- 图像拼接 python c++
- 随机接入响应(RAR,即MSG2)发送过程
- POJ 1273 (基础最大流) Drainage Ditches
- android NDK c++ library
- 完全禁用Microsoft Compatibility Telemetry
- 《深入理解计算机系统》第七章 链接
- Android 系统(253)---O版本,用耳机按键控制FM的修改方法
- M - Corporate Identity(多组字符串匹配问题)
- java翻转字符串中的单词
- uboot在s3c2440上的移植(1)
- 快捷键查看Emacs源码
- (通用版)salesforce中soql及sosl的伪‘Like’模糊检索
- Have Fun with Numbers及循环链表(约瑟夫问题)
- Root Pane Container(三)
- MATLAB/Simulink系统建模与仿真
- 生成函数学习笔记心得
- 男朋友智商测试大集结(一):Oracle数据库查询操作练习81题(附答案)
- itext7读取pdf 中文_itext7史上最全实战总结
- css3立体样式下载按钮