И это всё МОЁ

Что работает потенциально быстрее: for или forEach?

for (Object item : items) { ... }
// VS
items.forEach(item -> { ... });

Логика мне подсказывает, что между ними нет разницы (вообще). Интуитивно кажется, что если кто-то и будет быстрее, то for.

Попробовал запустить такой тест:

public class TestApplication {

public static void main(final String[] args) {
final List<String> items = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
items.add(String.format("Item #%d", i));
}

final AtomicInteger payload = new AtomicInteger();

// test 1
long testStart = System.currentTimeMillis();
for (final String item : items) {
payload.addAndGet(1);
}
long testStop = System.currentTimeMillis();
System.out.println(String.format("Test 1 (for): %d", testStop - testStart));

// test 2
testStart = System.currentTimeMillis();
items.forEach(item -> {
payload.addAndGet(1);
});
testStop = System.currentTimeMillis();
System.out.println(String.format("Test 2 (forEach): %d", testStop - testStart));

// test 3
testStart = System.currentTimeMillis();
for (final String item : items) {
payload.addAndGet(1);
}
testStop = System.currentTimeMillis();
System.out.println(String.format("Test 3 (for): %d", testStop - testStart));

// test 4
testStart = System.currentTimeMillis();
items.forEach(item -> {
payload.addAndGet(1);
});
testStop = System.currentTimeMillis();
System.out.println(String.format("Test 4 (forEach): %d", testStop - testStart));
}

}

Результат:

Test 1 (for):     171
Test 2 (forEach): 162
Test 3 (for): 162
Test 4 (forEach): 145

(вывод по результатам нескольких запусков: forEach, как правило, работает быстрее for на ~ несколько миллисекунд)

Если убрать payload (запустить пустые циклы), то результат примерно такой (forEach опять быстрее):

Test 1 (for):     76
Test 2 (forEach): 73
Test 3 (for): 78
Test 4 (forEach): 70

Если заменить ArrayList на HashSet, то результаты примерно одинаковые (то for быстрее то forEach):

Test 1 (for):     431
Test 2 (forEach): 421
Test 3 (for): 368
Test 4 (forEach): 386







 , , ,