全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-11 5 分钟 ✍️ juanwangdev

Java迭代器模式

迭代器模式提供统一方式遍历聚合对象,不暴露内部结构。

模式定义

意图:提供顺序访问聚合对象元素的方法,不暴露内部表示。

适用场景

  • 需要统一遍历不同集合
  • 不想暴露集合内部结构
  • 需要多种遍历方式

模式结构

迭代器接口

Java
public interface Iterator<T> {
    boolean hasNext();
    T next();
}

聚合接口

Java
public interface Aggregate<T> {
    Iterator<T> createIterator();
}

具体聚合

Java
public class Bookshelf implements Aggregate<Book> {
    private Book[] books;
    private int size;

    public Bookshelf(int capacity) {
        this.books = new Book[capacity];
    }

    public void addBook(Book book) {
        if (size < books.length) {
            books[size++] = book;
        }
    }

    public Book getBookAt(int index) {
        return books[index];
    }

    public int getSize() {
        return size;
    }

    @Override
    public Iterator<Book> createIterator() {
        return new BookshelfIterator(this);
    }
}

具体迭代器

Java
public class BookshelfIterator implements Iterator<Book> {
    private Bookshelf bookshelf;
    private int index = 0;

    public BookshelfIterator(Bookshelf bookshelf) {
        this.bookshelf = bookshelf;
    }

    @Override
    public boolean hasNext() {
        return index < bookshelf.getSize();
    }

    @Override
    public Book next() {
        if (hasNext()) {
            return bookshelf.getBookAt(index++);
        }
        return null;
    }
}

使用示例

Java
Bookshelf bookshelf = new Bookshelf(3);
bookshelf.addBook(new Book("Java入门"));
bookshelf.addBook(new Book("设计模式"));
bookshelf.addBook(new Book("算法导论"));

Iterator<Book> iterator = bookshelf.createIterator();
while (iterator.hasNext()) {
    Book book = iterator.next();
    System.out.println(book.getTitle());
}

Java内置迭代器

Java集合框架内置Iterator接口:

Java
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

// 使用迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    System.out.println(item);
}

// 使用forEach(Java 8+)
list.forEach(System.out::println);

// 使用增强for循环
for (String item : list) {
    System.out.println(item);
}

迭代器删除元素

Java
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if ("B".equals(item)) {
        iterator.remove();  // 安全删除当前元素
    }
}

注意:迭代过程中直接调用list.remove()会抛ConcurrentModificationException

双向迭代器

Java
public interface BidirectionalIterator<T> extends Iterator<T> {
    boolean hasPrevious();
    T previous();
}

// ListIterator实现双向遍历
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
    System.out.println(listIterator.next());
}
while (listIterator.hasPrevious()) {
    System.out.println(listIterator.previous());
}

不同遍历方式

Java
// 正向遍历
Iterator<Book> forwardIterator = bookshelf.createIterator();

// 反向遍历
Iterator<Book> reverseIterator = bookshelf.createReverseIterator();

迭代器模式优点

  1. 统一遍历方式,简化客户端
  2. 不暴露集合内部结构
  3. 支持多种遍历方式
  4. 同一集合可多个迭代器同时遍历

注意事项

遍历过程中修改集合需使用迭代器的remove()

迭代器实现应保证hasNext()和next()一致性

Java集合已内置迭代器,通常无需自定义

foreach底层就是迭代器

要点总结

  1. 迭代器模式统一遍历聚合对象
  2. Iterator接口定义hasNext()和next()
  3. Aggregate接口创建迭代器
  4. Java集合框架已实现迭代器模式
  5. 遍历时删除元素使用iterator.remove()

📝 发现内容有误?点击此处直接编辑

← 上一篇 Java责任链模式
下一篇 → Java适配器模式
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库