迭代器模式的理解

集合这种结构特点就是数据量多,但是存储的结构很不一样,因此若想要对不同结构的数据进行遍历就需要针对每个集合的结构进行解析,然后写出遍历的代码,在这种情况下,若是有一个统一的东西来展示集合中的数据就再好不过了,用户需要遍历一个集合时,只需要调用迭代器获取想要的数据,无需关注其具体的实现细节,这就是迭代器模式
迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即不暴露其内部的结构。

借助HashMap来理解迭代器模式
如图
在这里插入图片描述

已知map结构是一种key-value结构,但是底层key-value的结构体现的是一个Entry实体,因此提供一个Entry的迭代器。另外或需要遍历所有key和value的需求,都提供了对应的iterator,这样使用该结构的人就无需灌注如何遍历,直接调用即可
举例EntryIterator
已知需要获取map中的entry集合需要调用
在这里插入图片描述

那么我们看下entrySet()的实现
在这里插入图片描述

若es是空的话,就new一个新的EntrySet,但是构造器中是无参的。具体看EntrySet类的实现,是一个静态内部类
在这里插入图片描述

其中关键的iterator()方法的实现如下
在这里插入图片描述

可以看出来返回的是一个迭代器EnttyIterator,迭代器中的泛型就是map中的数据
在这里插入图片描述

可以看出改迭代器就一个方法nextNode(),而由于当前类是内部类,因此可以直接调用到外部类HashIterator的nextNode()方法,那么啥时候用到呢这就需要看字节码了,我们试着编译
在这里插入图片描述

可以看见调用的就是迭代器获取每个元素,并且调用对应的next()方法,那么对应的keySet()和values()方法的核心方法就是各自的next()
在这里插入图片描述

都是有各自的迭代器,然后获取key或者value,返回一个个输出完成遍历
另外可以发现,debug每个entries是有的,这是因为他们都调用了基类的toString()方法。
在这里插入图片描述

而这段的实现逻辑就已经把对应的迭代器数据遍历打印了。
迭代器模式个人理解的总结,提供了一个遍历数据的统一接口,想要遍历数据,就利用对应的hasnext()和next()同一结构来处理,无需关注深层的代码细节,迭代器并不存储数据,他只提供一种统一的行为给用户,这也是被叫做行为型设计模式的原因!(理解尚且浅薄)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值