История изменений
Исправление SaBo, (текущая версия) :
В общем, итог, по-моему следующий:
Производительность for (iterator) vs forEach зависит от фактической реализации forEach и итератора.
Для реализации java.util.ArrayList forEach выигрывает в производительности у for. Если для java.util.ArrayList заменить forEach дефолтной реализацией из java.lang.Iterable:
public static class TestList<E> extends ArrayList<E> {
private static final long serialVersionUID = 4967704191406430634L;
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
for (E t : this) {
action.accept(t);
}
}
}
То вопроса о том что быстрее быть не может (т.к. используется for / iterator). Результаты теста:
Test 1 (for): 94
Test 2 (forEach): 102
Test 3 (iterator): 95
Test 4 (for): 95
Test 5 (forEach): 102
Test 6 (iterator): 102
Test 7 (for-i): 100
Исходная версия SaBo, :
В общем, итог, по-моему следующий:
Производительность for (iterator) vs forEach зависит от фактической реализации forEach.
Для реализации java.util.ArrayList forEach выигрывает в производительности у for. Если для java.util.ArrayList заменить forEach дефолтной реализацией из java.lang.Iterable:
public static class TestList<E> extends ArrayList<E> {
private static final long serialVersionUID = 4967704191406430634L;
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
for (E t : this) {
action.accept(t);
}
}
}
То вопроса о том что быстрее быть не может (т.к. используется for / iterator). Результаты теста:
Test 1 (for): 94
Test 2 (forEach): 102
Test 3 (iterator): 95
Test 4 (for): 95
Test 5 (forEach): 102
Test 6 (iterator): 102
Test 7 (for-i): 100