Java中Iterator与Iterable的区别

Iterable的定义:

java.lang包

/**
 * Implementing this interface allows an object to be the target of
 * the "foreach" statement.
 *
 * @param  the type of elements returned by the iterator
 *
 * @since 1.5
 */
public interface Iterable {

    /**
     * Returns an iterator over a set of elements of type T.
     *
     * @return an Iterator.
     */
    Iterator iterator();
}

Iterator的定义:

java.util包:

public interface Iterator {
    boolean hasNext();

    E next();

    void remove();
}

Iterator是迭代器类,而Iterable是为了只要实现该接口就可以使用foreach,进行迭代。

Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。

集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。

那为什么这些集合类不直接实现Iterator呢?

Iterator中和核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直接实现Iterator,则必须包括当前迭代位置的指针。当集合在方法间进行传递的时候,由于当前位置不可知,所以next()之后的值,也不可知。而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。

你可能感兴趣的:(java)