迭代器模式是一种行为型设计模式,它提供了一种访问集合对象元素的方法,而无需暴露其内部表示。通过使用迭代器,可以按照特定顺序遍历集合中的元素。
在集合对象内部定义一个迭代器类,由集合对象主动调用迭代器的方法进行遍历。
- // 这里假设我们有一个名为MyCollection的具体集合类
-
- import java.util.ArrayList;
- import java.util.List;
-
- class MyCollection
{ - private List
elements; -
- public MyCollection() {
- this.elements = new ArrayList<>();
- }
-
- public void add(T element) {
- elements.add(element);
- }
-
- // 获取内部迭代器
- public Iterator
getIterator() { - return new ConcreteIterator();
- }
-
- // 具体迭代器类,实现了Iterator接口
- private class ConcreteIterator implements Iterator
{ - private int index;
-
- @Override
- public boolean hasNext() {
- return index < elements.size();
- }
-
- @Override
- public T next() {
- if (this.hasNext()) {
- return elements.get(index++);
- }
- return null;
- }
- }
- }
-
- // 定义一个迭代器接口
- interface Iterator
{ - boolean hasNext();
- T next();
- }
-
-
-
- public class Main {
- public static void main(String[] args) {
- // 使用示例
-
- MyCollection
collection = new MyCollection<>(); - collection.add("A");
- collection.add("B");
- collection.add("C");
-
- // 获取内部迭代器并遍历集合元素
- Iterator
iterator = collection.getIterator(); - while (iterator.hasNext()) {
- String element = iterator.next();
- System.out.println(element);
- }
- }
- }
在上述示例中,我们创建了一个具体集合类 MyCollection
,其中包含一个私有内部类 ConcreteIterator
实现了迭代器接口。
在具体集合类中定义的 getIterator()
方法返回该内部迭代器对象。客户端代码可以通过调用该方法获取到具体集合的内部迭代器,并使用循环遍历输出每个元素。在实际应用中,还可以根据需要对内部迭代器进行扩展,例如添加过滤条件、排序等操作。
存在的问题:
客户端代码通过调用外部的迭代器来遍历集合对象。在外部迭代器中,客户端代码通过手动调用迭代器的方法来遍历集合对象,并可以灵活地控制遍历顺序和跳过特定元素。
- // 这里假设我们有一个名为MyCollection的具体集合类
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- class MyCollection
{ - private List
elements; -
- public MyCollection() {
- this.elements = new ArrayList<>();
- }
-
- public void add(T element) {
- elements.add(element);
- }
-
- // 获取内部迭代器
- public Iterator
getIterator() { - return elements.iterator();
- }
- }
-
- public class Main {
- public static void main(String[] args) {
- // 使用示例
-
- MyCollection
collection = new MyCollection<>(); - collection.add("A");
- collection.add("B");
- collection.add("C");
-
- // 获取外部迭代器并遍历集合元素
- Iterator
iterator = collection.getIterator(); - while (iterator.hasNext()) {
- String element = iterator.next();
- System.out.println(element);
- }
- }
- }
在上述示例中,我们创建了一个具体集合类 MyCollection
,其中的 getIterator()
方法返回了Java内置的迭代器对象。
在客户端代码中,我们通过调用具体集合的 getIterator()
方法获取到外部迭代器,并使用循环遍历输出每个元素。在实际应用中,可以根据需要使用不同类型的外部迭代器,例如自定义实现一个针对特定需求进行封装的外部迭代器类。这样可以灵活地控制遍历逻辑和提供额外功能。