我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?


当前回答

在java中的每个循环中都引入了Iterable

public interface Collection<E> extends Iterable<E>  

Iterator是在Iterable上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。

其他回答

最重要的考虑是所讨论的项是否应该能够多次遍历。这是因为你总是可以通过再次调用iterator()来倒带一个Iterable,但是没有办法倒带一个iterator。

如果一个集合是可迭代的,那么它可以使用迭代器迭代(因此可以在for每个循环中使用)。迭代器是遍历集合的实际对象。

Iterable是一系列可以迭代的元素的简单表示。它没有任何迭代状态,例如“当前元素”。相反,它只有一个产生Iterator的方法。

迭代器是具有迭代状态的对象。它允许您使用hasNext()检查是否有更多元素,并使用next()移动到下一个元素(如果有)。

通常,Iterable应该能够产生任意数量的有效迭代器。

匿名类可以轻松地将Iterator转换为Iterable,并允许您使用Iterable语法(for loops, forEach())。

例如:考虑一个Iterator<T> it

for (T element : new Iterable<T>() {

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

}) {
    //do something with `T element`
}

抽象在函数中

static <T> Iterable<T> toIterable(Iterator<T> it) {
    return new Iterable<T>() {

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

    };
}

使用

for (T element: toIterable(it) {
...
}

Iterable的实现提供了自身的迭代器:

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

迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环遍历数据集合(尽管有删除的能力)。

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

看到Javadoc。