Я пытаюсь выяснить, почему компилятор просматривает коллекцию, используя функциональный стиль, а не императив.Вот простой пример, где функциональный поиск идет первым и занимает 9,5 секунды, а императив следует сразу же с 10,3.Как только я переставляю их и ставлю императив перед функционалом, результаты становятся похожими: 10.1 и 10.29
Я добавил некоторые изменения, основанные на ответах пользователей, которые делают мой код более корректным.Теперь бенчмарк запускается в нужный момент времени и отсчитывает время того, что мне точно нужно.Но вопрос остается без ответа.Несмотря на то, что я запускаю два независимых таймера, для каждого цикла функциональный цикл завершается, но поиск выполняется намного быстрее, чем Imperative.1,03 против 0,3.
import java.util.*;
public class Main
{
public static void main(String[] args)
{
List<Integer> numbers = new ArrayList();
int size = 200000000;
//add objects to collection
for(int i = 0; i <= size; i++)
{
numbers.add(i);
}
//functional
long timer = System.nanoTime();
if(numbers.contains(size))
{
System.out.println(System.nanoTime() - timer) / 1000000000.0);
}
//imperative
timer = System.nanoTime();
for(Integer num : numbers)
{
if(num.equals(size))
{
System.out.println(System.nanoTime() - timer) / 1000000000.0);
break;
}
}
}
}
Итак, вопрос такой:
- Почему функциональный поиск завершается быстрее?
Ценю ваш ответ