迭代器执行流程原理分析

迭代器

迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。
各种语言实现迭代器的方式皆不尽同,有些面向对象语言像Java,C#,Ruby,Python,Delphi都已将迭代器的特性内置语言当中,完美的跟语言集成,我们称之隐式迭代器(implicit iterator),但像是C++语言本身就没有迭代器的特色,但STL仍利用模板实现了功能强大的迭代器。STL容器的数据的内存地址可能会重新分配(reallocate),与容器绑定的迭代器仍然可以定位到重新分配后的正确的内存地址。
迭代器另一方面还可以集成生成器(generator)。有些语言将二者视为同一接口,有些语言如JavaScript则将之独立化。 (百度百科)

首先我们先问几个为什么

什么是迭代器:迭代器主要是用来遍历容器对象
为什么需要迭代器:链表无法按索引遍历元素 ,是遍历线性数据结构(链表)的重要方法之一
迭代器怎么做的:下文分析

迭代器原理分析

所有容器集合的的迭代器本质都继承于iterator接口所以我们分析一个容器的迭代器原理相当即可

LinkedList集合的迭代器分析

迭代器类的结构关系,从这里我们就能看出其实最后就是继承iterator接口

迭代器执行流程原理分析

从上面进入源码我们可以看出来iterator()方法本质是调用ListItr(0)构造方法
ListItr方法分析

这里主要是给next赋值如果size不等于当前index的话调用 node(index)方法

node(index)方法主要就是在链表中根据索引寻找对应数据

next()方法分析

这里我们可以发现这个next主要是就是返回当前的数据然后把当前的数据的下一个数据复制给next以供下次迭代使用

总结

迭代器主要就是利用每次迭代用next赋值当前数据的下一个元素为下次迭代提供数据这样循环来实现迭代的功能。

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33897 人正在系统学习中

来源:卖保熟瓜的程序员

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月20日
下一篇 2022年3月20日

相关推荐