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都有这个方法。
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都有这个方法。