什么是迭代器模式?
顺序访问集合对象的元素,不需要知道集合对象的底层实现或表示。
应用场景
代码实现
示例: 顺序输出一个集合的所有元素
//示例: 顺序输出集合的所有元素import java.util.ArrayList;import java.util.List;import java.util.ListIterator;/*** Java自带的迭代器模式 测试*/public class JDKIteratorPattern {public static void main(String[] args) {//构造集合List<Integer> list = new ArrayList<>();//添加10个数字for (int i = 0; i < 10; i++) {list.add(i);}//迭代器输出集合元素ListIterator<Integer> iterator = list.listIterator();while (iterator.hasNext()) {Integer i = iterator.next();System.out.print(i);}//输出://0123456789}}
JDK迭代器Iterator
ArrayList的迭代器具体实现
自定义一个迭代器
假设某集合存储了一些人名,迭代器输出每个人名
//示例: 顺序输出集合的所有元素/*** 定义 迭代器*/interface Iterator {//是否有下一个对象boolean hasNext();//获取下一个对象Object next();}/*** 定义 集合容器*/interface Container {//获取迭代器Iterator getIterator();}class NameRepository implements Container {public String[] names = {"Robert", "John", "Julie", "Lora"};@Overridepublic Iterator getIterator() {return new NameIterator();}private class NameIterator implements Iterator {int index;@Overridepublic boolean hasNext() {return index < names.length;}@Overridepublic Object next() {if (this.hasNext()) {return names[index++];}return null;}}}/*** 迭代器模式 测试*/public class IteratorPattern {public static void main(String[] args) {NameRepository namesRepository = new NameRepository();for (Iterator iter = namesRepository.getIterator(); iter.hasNext(); ) {String name = (String) iter.next();System.out.println("Name : " + name);}//输出://Name : Robert//Name : John//Name : Julie//Name : Lora}}
