用来遍历集合的工具。
实现方式:
使用一个游标记录当前读取位置。
容器中使用迭代器:
一般迭代器都有的方法,整个接口:
public interface MyInterator { void first();//将游标指向第一个元素 Object next();//获取此元素并且将游标指向下一个元素 boolean hasNext();//判断是否存在下一个元素 int getCursor();//获取游标位置 }
手动实现一个内部类(直接使用外部属性)迭代器,专为此类服务的迭代器。
我的集合:
public class ConcreteMyAggregate { //我的集合 private List<Object> list = new ArrayList<>(); //获取容器内容 public List<Object> getList() { return list; } //设置容器内容 public void setList(List<Object> list) { this.list = list; } //构造器 public ConcreteMyAggregate() { } //添加元素 public void addObject(Object o){ this.list.add(o); } //移除元素 public void removeObject(Object o){ this.list.remove(o); } //获取迭代器 public MyInterator getIterator(){ return new ConcreteIterator(); } }
迭代器:在 ConcreteMyAggregate 类中增加一个内部类(直接可以访问它的属性,专为它服务的迭代器)。主要使用一个游标完成指定访问。
//迭代器 private class ConcreteIterator implements MyInterator{ private int cursor;//游标 @Override public void first() { cursor=0;//指向第一个元素 } public int getCursor() { return cursor; } /** * 获取当前元素,并且将游标指向下一个元素。 * @return */ @Override public Object next() { //如果是最后一个,则游标不加一 if(cursor<list.size()){ cursor++; return list.get(cursor-1); }else { return list.get(cursor); } } /** * 判断是否有下一个元素 * @return */ @Override public boolean hasNext() { if(cursor<list.size()){ return true; } return false; } }
测试:
public static <ConcreteIterator> void main(String[] args) { ConcreteMyAggregate cma= new ConcreteMyAggregate(); cma.addObject("i"); cma.addObject("love"); cma.addObject("u"); MyInterator myInterator = cma.getIterator(); while (myInterator.hasNext()){ System.out.println("元素:"+myInterator.next()); System.out.println("游标:"+myInterator.getCursor()); } }
运行结果·:
标签:Iterator,迭代,void,元素,list,游标,模式,public From: https://www.cnblogs.com/lurenjia-bky/p/16927095.html