Java 8 Java8内部迭代
Java8foreach方法是否真正使用迭代器?我用谷歌搜索到骨头,找不到确切的位置。只有它将以与数据相同的顺序进行迭代这一事实才是正确的Java 8 Java8内部迭代,java-8,java-stream,Java 8,Java Stream,Java8foreach方法是否真正使用迭代器?我用谷歌搜索到骨头,找不到确切的位置。只有它将以与数据相同的顺序进行迭代这一事实才是正确的 任何提示?Iterable#forEach的默认实现基于迭代器 default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.a
任何提示?Iterable#forEach的默认实现基于迭代器
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default void forEach(consumerd另一方面:客户端不应依赖任何Iterable
实现来使用底层的迭代器
。即使当前实现如此,未来的版本也可能不会。由于调用方不知道forEach
是否将使用迭代器,因此它是一个“内部迭代”是整个要点:迭代的实现方式隐藏在实际的forEach
实现中。
@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();
}
}