1,Iterable与Iterator
1)迭代器模式:
用于遍历集合类的标准访问方法。主要目的是把逻辑访问从不同的集合类中抽象出来,避免暴露集合的内部机构。
ArrayList和LinkedList:抽离出来的逻辑访问可以使一样的,将集合本身和集合访问分离。
原理:遍历集合的游标和内部状态(当前游标位置、是否有下一个)都由Iterator迭代器维护。
2)Iterable和Iterator接口定义
Iterable:定义默认的iterator()方法,返回一个Iterator迭代器对象
Iterator:定义了遍历集合和移除集合元素的操作。
image.png
image.png
3)iterator()方法的实现
ArrayList的iterator方法,返回内部类Itr迭代器对象
image.png
LinkedList的iterator方法,返回内部类ListItr迭代器对象
image.png
4)集合类实现Iterable,使用内部类实现Iterator的原因
集合类直接实现Iterator,则集合本身需要维护一个游标。(作为参数传递时,会导致遍历不可预期)
实现Iterable接口,每次调用iterator()方法都重新new一个新的迭代器。
2,JDK迭代器模式的实现
1)ArrayList类的结构图
image.png
2)ArrayList内部类Itr实现迭代器
image.png
image.png
3)LinkedList类的结构图
image.png
4)LinkedList的ListItr内部类实现迭代器
ListItr构造器根据参数可以定位next和nextIndex的位置。
image.png
5)Linkedlist的DescendingIterator内部类实现迭代器
image.png

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png









网友评论