📜  Java|实现迭代器和可迭代接口(1)

📅  最后修改于: 2023-12-03 15:31:49.032000             🧑  作者: Mango

Java 实现迭代器和可迭代接口

迭代器(Iterator)和可迭代接口(Iterable)是 Java 中常用的两个接口,它们可以让我们轻松地遍历一个集合类。本文将介绍如何在 Java 中实现迭代器和可迭代接口。

可迭代接口

先来看可迭代接口(Iterable)。实现了该接口的类可以被 foreach 循环遍历。该接口只包含一个方法:

public interface Iterable<T> {
    Iterator<T> iterator();
}

其中的 iterator() 方法返回一个迭代器对象(Iterator),用于遍历该类中的元素。

我们可以通过以下步骤实现可迭代接口:

  1. 创建一个类并实现 Iterable 接口。
  2. 实现 iterator() 方法,返回该类中需要遍历的元素的迭代器对象。

以下是一个简单的例子:

import java.util.Iterator;
import java.util.List;

public class MyCollection<T> implements Iterable<T> {
    private List<T> list;

    public MyCollection(List<T> list) {
        this.list = list;
    }

    @Override
    public Iterator<T> iterator() {
        return list.iterator();
    }
}

在上面的例子中,我们创建了一个 MyCollection 类来实现可迭代接口,其中包含了一个泛型列表 list,并在构造函数中初始化。接着我们在 iterator() 方法中调用列表的 iterator() 方法返回它的迭代器。这样,在使用 foreach 循环时就可以遍历该类中的元素了。

下面是一个使用 MyCollection 类例子:

import java.util.ArrayList;
import java.util.List;

public class MyCollectionExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");

        MyCollection<String> myCollection = new MyCollection<String>(list);
        for (String element: myCollection) {
            System.out.println(element);
        }
    }
}

在上面的例子中,我们创建了一个字符串列表,然后使用 MyCollection 类包装该列表,最后使用 foreach 循环遍历该类中的元素。

迭代器

迭代器(Iterator)是一个用于遍历集合类中元素的对象。迭代器接口有以下方法:

public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

其中的 hasNext() 用于检查集合类中是否还有元素;next() 用于获取下一个元素;remove() 用于删除集合类中的当前元素。

我们可以通过以下步骤实现迭代器:

  1. 创建一个类并实现 Iterator 接口。
  2. 实现 hasNext() 方法,用于检查集合类中是否还有元素。
  3. 实现 next() 方法,用于获取下一个元素。
  4. 可选地实现 remove() 方法,用于删除集合类中的当前元素。

以下是一个简单的例子:

import java.util.Iterator;
import java.util.List;

public class MyIterator<T> implements Iterator<T> {
    private List<T> list;
    private int index;

    public MyIterator(List<T> list) {
        this.list = list;
        index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < list.size();
    }

    @Override
    public T next() {
        T element = list.get(index);
        index++;
        return element;
    }

    @Override
    public void remove() {
        list.remove(index - 1);
        index--;
    }
}

在上面的例子中,我们创建了一个 MyIterator 类来实现迭代器接口,其中包含了一个泛型列表 list,并在构造函数中初始化。接着我们在 hasNext() 方法中检查列表中是否还有元素;在 next() 方法中返回下一个元素;在 remove() 方法中删除当前元素。

下面是一个使用 MyIterator 类例子:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MyIteratorExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");

        Iterator<String> iterator = new MyIterator<String>(list);
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

在上面的例子中,我们创建了一个字符串列表,然后使用 MyIterator 类包装该列表,最后使用迭代器遍历该列表中的元素。

总结

迭代器和可迭代接口是 Java 中常用的接口,它们的实现可以让我们更容易地遍历一个集合类。本文介绍了如何在 Java 中实现迭代器和可迭代接口,希望对你有所帮助。