Сейчас изучаю компиляторы и тут начал простые эксперименты устраивать и обнаружил, что казалось бы более сложный способ работает в разы быстрее?
Почему такой код, с объявлением массива в 1-10 раз быстрее, и скорость заполнения
O(α(n)) тогда как самый стандартный способ O(a(n)*log(n)) что намного больше?
//За 40-60 мс
List s=new ArrayList(a);
int i=0;
for(Object p : s){
p=i++;
}
А этот медленее при a = 40 999 999 250 -600 мс
int i2[]=new int[a];
for(i=0;i<a;i++){
i2[i]=i;
При том я комбинировал и менял местами тесты, делал и до и после, что бы не закешировалось ни чего
Все дело в for( el : list) , но ведь я то же i++ кручу в цикле, и там то же проверка идет(наверное). Вопрос чисто по работе самого компилятора, стека функций, при том все операции тоже быстрее будут, даже с учетом преобразования из обьекта в int