Java中的Iterator底层原理实现

两个抽象方法

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

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

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

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

实现方法

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

Java中的Iterator底层原理实现_第1张图片
Collection就继承了Iterable接口,所以Collection体系的集合都得按照这种方式返回迭代器以供大家访问数据。

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

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

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

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

总结

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

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

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

你可能感兴趣的:(数据结构,数据结构)