1,Iterable与Iterator
1)迭代器模式:
image.png用于遍历集合类的标准访问方法。主要目的是把逻辑访问从不同的集合类中抽象出来,避免暴露集合的内部机构。
ArrayList和LinkedList:抽离出来的逻辑访问可以使一样的,将集合本身和集合访问分离。
原理:遍历集合的游标和内部状态(当前游标位置、是否有下一个)都由Iterator迭代器维护。
2)Iterable和Iterator接口定义
Iterable:定义默认的iterator()方法,返回一个Iterator迭代器对象
Iterator:定义了遍历集合和移除集合元素的操作。
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
网友评论