什么是迭代器模式
相信做java的同学对jdk中的 Iterator 接口应该不会陌生。jdk中的几乎所有的集合都实现了Iterator接口。迭代器提供了一种模式去访问容器,可以让我们不直接操作容器本身,而实现对容器的遍历。
迭代器模式组成
抽象迭代器
public interface Iterator {
/**
* 遍历下一个
* @return Object
*/
Object next();
/**
* 是否有下一个元素
* @return boolean
*/
boolean hasNext();
/**
* 移除当前节点
* @return boolean
*/
boolean remove();
}
抽象集合封装接口
public interface Collection {
/**
* 增加元素
* @param obj obj
*/
void add(Object obj);
/**
* 返回新迭代器
* @return Iterator
*/
Iterator iterator();
}
具体迭代器
public class MyIterator implements Iterator {
private List<String> list = new ArrayList<>();
private int cursor = 0;
public MyIterator(List<String> list) {
this.list = list;
}
@Override
public Object next() {
if (this.hasNext()) {
return this.list.get(this.cursor++);
}
else {
return null;
}
}
@Override
public boolean hasNext() {
return this.cursor < this.list.size();
}
@Override
public boolean remove() {
this.list.remove(--cursor);
return true;
}
}
具体集合类
public class MyCollection implements Collection {
private List<String> list = new ArrayList<>();
@Override
public void add(Object obj) {
this.list.add(obj.toString());
}
@Override
public Iterator iterator() {
return new MyIterator(list);
}
}
测试驱动
public class Client {
public static void main(String[] args) {
Collection collection = new MyCollection();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
collection.add("e");
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
Object index = iterator.next();
System.out.println(index);
if ("c".equals(index)) {
iterator.remove();
}
}
System.out.println("after remove ------ ");
iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}