两个抽象方法
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