java8 forEach方法是否真的使用迭代器?我把它谷歌到骨头,找不到它。只有它将以相同的顺序迭代数据的事实。
任何提示?
答案 0 :(得分:12)
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接口中声明的,因此所有迭代都有此方法。