java8 forEach方法是否使用迭代器?我把它搜得一干二净,找不到准确的。只有这样一个事实,即它将以相同的顺序迭代数据。
有小费吗?
发布于 2015-05-19 16:46:09
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接口中声明的,所以所有可迭代性都有此方法。
https://stackoverflow.com/questions/30331427
复制相似问题