Java中Iterator与Iterable的区别

来源:互联网 发布:淘宝百货用品名字大全 编辑:程序博客网 时间:2024/06/05 17:10

Iterable的定义:

java.lang包

/** * Implementing this interface allows an object to be the target of * the "foreach" statement. * * @param <T> the type of elements returned by the iterator * * @since 1.5 */public interface Iterable<T> {    /**     * Returns an iterator over a set of elements of type T.     *     * @return an Iterator.     */    Iterator<T> iterator();}

Iterator的定义:

java.util包:

public interface Iterator<E> {    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则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。

0 0
原创粉丝点击