Java中的Iterator底层原理实现

两个抽象方法

Iterator主要有两个抽象方法,让子类实现。

hasNext()用来判断还有没有数据可供访问。next()方法用于访问集合的下一个数据。

这两个方法不像List的get()那样依赖索引获取数据,也不像Queue的poll方法那样依赖特定规则获取数据。

迭代器的方法将通用性做到了极致,可以访问不同特性的集合数据,而无需关心他们的内部实现

实现方法

集合不是直接去实现Iterator接口,而是实现的Iterable接口,用这个Iterable定义的方法去返回当前集合的迭代器

在这里插入图片描述
Collection就继承了Iterable接口,所以Collection体系的集合都得按照这种方式返回迭代器以供大家访问数据。

为什么要使用这种方式来使用迭代器?

因为集合直接实现迭代器的话,那么别人调用了集合的next()方法就会影响到你遍历数据

你本来希望从头开始遍历所有数据,然而别人可能已经将数据遍历完了,你就拿不到数据了。而通过实现Iterable这种方式,就可以每次返回新的迭代器。不同迭代器之间遍历数据互不影响。所以这里也就能看出Iterator是具有独立性和隔离性的。

迭代器除了有屏蔽集合间不同特性之外,在Java中还有一个好处就是如果你实现了Iterator接口,并按要求返回了迭代器,那你就可以使用for each循环了去直接遍历数据

总结

Iterable用来返回迭代器,实现了该接口的类,就算是可迭代对象了,可以直接使用for-each循环访问数据。

Iterator就是迭代器,用来遍历集合的数据,并无需关心集合的内部实现for-each循环底层用的就是迭代器

参考资料:【每天一个技术点】迭代器之:Iterable & Iterator

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值