接口介绍

Iterable 接口是 Java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素。Iterator 接口提供指定类型的迭代器。

Iterable 源码

package java.lang;
/**
 * 实现这个接口的类对象,可以使用 "for-each loop" 声明。
 */
public interface Iterable<T> {
    /**
     * 返回一个迭代器对象。
     */
    Iterator<T> iterator();

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

Iterator 源码

package java.util;
import java.util.function.Consumer;
/**
 * 一个集合的迭代器对象。
 */
public interface Iterator<E> {

    /**
     * 判断是否还有下一个元素。
     */
    boolean hasNext();

    /**
     * 返回下一个元素。
     */
    E next();

    /**
     * 删除上一个返回的元素。 
     */ 
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    /**
     * Performs the given action for each remaining element until all elements
     * have been processed or the action throws an exception.
     */ 
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

使用示例

public class MyCollection<E> implements Iterable<E> {
    @SuppressWarnings("unchecked")
    @Override
    public Iterator iterator() {
        return new MyIterator();
    }

    private class MyIterator implements Iterator<E>{
        @Override
        public boolean hasNext() {
            return false;
        }

        @Override
        public E next() {
            return null;
        }
    }
}

for 循环和迭代器 Iterator 对比

ArrayList 随机访问比较快,而 for 循环中 ArrayList 的 get() 方法是随机访问的方法,因此在 ArrayList 里,for循环较快。LinkedList 顺序访问比较快,Iterator 中的 next() 方法是顺序访问的方法,因此在 LinkedList 里,使用 Iterator 较快。从数据结构角度分析,for 循环适合访问顺序结构,可以根据下标快速获取指定元素。而 Iterator 适合访问链式结构,因为迭代器是通过 next() 方法来定位的。

相关文章:

  • 2019-07-21
  • 2022-01-13
  • 2022-03-03
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-03-08
  • 2021-12-22
  • 2022-01-12
  • 2021-11-27
  • 2021-11-16
相关资源
相似解决方案