Java8 内部迭代

Java8 internal iteration

java8 forEach 方法是否真的使用迭代器?我 google 它是骨子里的东西,找不到它的确切位置。只是它会以与数据相同的顺序迭代。

有什么建议吗?

Iterable#forEach 的默认实现基于迭代器。

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

但在 ArrayList 中被重写为这个,并且不使用迭代器,它在其内部数组上使用 for 循环

    @Override
    public void forEach(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        final int expectedModCount = modCount;
        @SuppressWarnings("unchecked")
        final E[] elementData = (E[]) this.elementData;
        final int size = this.size;
        for (int i=0; modCount == expectedModCount && i < size; i++) {
            action.accept(elementData[i]);
        }
        if (modCount != expectedModCount) {
            throw new ConcurrentModificationException();
        }
    }

所以这取决于它的实现。

无论如何,由于这个方法是在Iterable接口中声明的,所以所有的iterables都有这个方法。