一、实质
提供一种可以遍历聚合对象的方式。又称游标模式
聚合对象:存储数据
迭代器:遍历数据
二、示例
正向遍历迭代器
package com.lgd.iterator;
/**
* 自定义的迭代器接口
* @author liguodong
*
*/
public interface MyIterator {
void first();//将游标指向第一个元素
void next();//将游标指向下一个元素
boolean hasNext();//判断是否存在下一个元素
boolean isFirst();//是否是第一个元素
boolean isLast();//是否是最后一个元素
Object getCurrObj();//获取当前游标指向的对象
}
package com.lgd.iterator;
import java.util.ArrayList;
import java.util.List;
//聚集抽象类
public interface MyAggregate{
public void addObject(Object obj);
public void removeObject(Object obj);
public List<Object> getList();
public void setList(List<Object> list);
public MyIterator createIterator();
}
/**
* 自定义的聚合类
* @author liguodong
*
*/
class ConcreteMyAggregate implements MyAggregate{
private List<Object> list = new ArrayList<>();
public void addObject(Object obj)
{
this.list.add(obj);
}
public void removeObject(Object obj)
{
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//获得迭代器
public MyIterator createIterator(){
return new ConcreteIterator();
}
//使用内部类定义迭代器,可以直接使用外部类的属性
private class ConcreteIterator implements MyIterator{
private int cursor;//定义游标用于记录遍历的位置
@Override
public void first() {
// TODO Auto-generated method stub
cursor = 0;
}
@Override
public void next() {
// TODO Auto-generated method stub
if(cursor<list.size())
{
cursor++;
}
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(cursor<list.size())
{
return true;
}
return false;
}
@Override
public boolean isFirst() {
// TODO Auto-generated method stub
return cursor==0?true:false;
}
@Override
public boolean isLast() {
// TODO Auto-generated method stub
return cursor==list.size()-1?true:false;
}
@Override
public Object getCurrObj() {
// TODO Auto-generated method stub
return list.get(cursor);
}
}
}
package com.lgd.iterator;
public class Client {
public static void main(String[] args) {
MyAggregate cma = new ConcreteMyAggregate();
cma.addObject("aa");
cma.addObject("bb");
cma.addObject("cc");
MyIterator iterator = cma.createIterator();
while(iterator.hasNext())
{
System.out.println(iterator.getCurrObj());
iterator.next();
}
}
}
运行结果:
aa
cc
逆向遍历迭代器(类似)
三、开发场景
JDK内置的迭代器(List/Set)
原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/44066835
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~