迭代器模式-Iterator
Posted GoldArowana &
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器模式-Iterator相关的知识,希望对你有一定的参考价值。
迭代器模式-Iterator
用于访问一个集合中的各个元素, 而又不会暴露集合的内部的细节.
迭代器接口
统一定义了迭代器该有的方法.
hasNext() 用于判断是否还有下一个元素
next() 用于返回下一个元素, 并且使内部计数器+1
/** * 迭代器接口 */ public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); }
用于生成迭代器的接口
/** * 该接口中只有一个方法, 这个方法用于生成一个迭代器, 并返回 * <p> * 如果某个集合想使用迭代器, 那么就就应该实现这个接口 */ public interface Aggregate { public abstract Iterator iterator(); }
元素类
本例子中举的是"猫群组"中利用迭代器来遍历每一只猫
所以在创建猫群组之前, 先把"猫类" 定义好
/** * Cat是个体, 一个Cat实例代表一只猫. * CatGroup是Cat的集合, 一个CatGroup实例代表一群猫. */ public class Cat { private int age; private String name; public Cat(String name, int age) { this.age = age; this.name = name; } @Override public String toString() { return "Cat{" + "name=‘" + name + ‘\‘‘ + ", age=‘" + age + ‘\‘‘ + ‘}‘; } }
集合类
接下来创建"猫群组"类
猫群组类想要使用迭代器的话, 需要先实现Aggregate接口的iterator()方法, 来获提供群组的迭代器.
/** * Cat是个体, 一个Cat实例代表一只猫. * CatGroup是Cat的集合, 一个CatGroup实例代表一群猫. * * 并且这个类实现了Aggregate的iterator()方法来获取迭代器 */ public class CatGroup implements Aggregate { private int last; private Cat[] cats; public CatGroup(int maxsize) { this.cats = new Cat[maxsize]; } public Cat getByIndex(int index) { return cats[index]; } public void append(Cat cat) { cats[last++] = cat; } public int getLength() { return last; } @Override public Iterator iterator() { return new CatGroupIterator(this); } }
集合迭代器类
接下来介绍猫群组的迭代器.
hasNext() 用于判断猫群组里是否还有下一只猫. 如果 index 小于 猫群组中猫的个数, 那么肯定有下一只; 否则, 肯定没有下一只猫, 表示已经遍历完所有猫了
next()方法负责直接返回"下一只猫" 并且把计数器+1.
public class CatGroupIterator implements Iterator { private int index; private CatGroup catGroup; public CatGroupIterator(CatGroup catGroup) { this.catGroup = catGroup; this.index = 0; } @Override public boolean hasNext() { return index < catGroup.getLength(); } @Override public Object next() { return catGroup.getByIndex(index++); } }
测试
public class Main { public static void main(String[] args) { // 创建一个猫群 CatGroup catGroup = new CatGroup(20); // 向猫群里添加猫 catGroup.append(new Cat("betty", 10)); catGroup.append(new Cat("nancy", 11)); catGroup.append(new Cat("wood", 14)); catGroup.append(new Cat("zira", 18)); // 获取遍历该猫群的迭代器 Iterator iterator = catGroup.iterator(); // 迭代并输出 while (iterator.hasNext()) { Cat c = (Cat) iterator.next(); System.out.println(c); } } }
以上是关于迭代器模式-Iterator的主要内容,如果未能解决你的问题,请参考以下文章