для оптимизации цикла - PullRequest
44 голосов
/ 23 мая 2011
List<String> flowers = new ArrayList<String>();

Мой цикл for в настоящее время выглядит следующим образом ...

for (int i = 0; i < flowers.size(); i++) {
...
}

ИЛИ я должен изменить это, чтобы выглядеть как код, приведенный ниже

int size = flowers.size();
for (int i = 0; i < size; i++) {
...
}

Что более производительно (при условии, что у меня большой массив цветов), я думаю, это должно быть последнее.

Ответы [ 15 ]

0 голосов
/ 03 декабря 2015
String d = JOptionPane.showInputDialog("enter start");
int s = Integer.parseInt(d);
String h = JOptionPane.showInputDialog("enter the end");
int z = Integer.parseInt(h);
for (int a = 1 ; a<10 ; a++) { 
    if (a%2 == 0 ) {
        JOptionPane.showMessageDialog(null, a);
        System.out.print(a);
    }
}    
0 голосов
/ 11 мая 2012

Чтобы избежать всей этой нумерации, а также итераторов и проверок при написании кода, используйте следующий простой наиболее читаемый код, который имеет максимальную производительность.Почему это имеет максимальную производительность (подробности уточняются)

for (Object object : aCollection) { 
// Do something here
}

Если нужен индекс, то: Для выбора между двумя вышеуказанными формами: Вторая лучше, потому что вы используете локальную переменную для проверкивверх.При выходе из метода переменная перемещается в корзину стека.

0 голосов
/ 23 мая 2011

Мой подход немного отличается от этой проблемы. Для меня действительно не имеет значения, какой метод вы выберете. причина в том, что «улучшение производительности», которое вы получите в лучшем оптимизированном методе, будет ~ 50 мс для 250000 итераций !! (согласно сообщению @ David). И, очевидно, это улучшение - не то, на что вы хотели бы тратить свое драгоценное время на поиск оптимизированного решения.

(Но, тем не менее, согласно первоначальному вопросу ОП, я также хотел бы предложить последний подход.)

Я знаю, что ответ немного странный и необычный, но это реальность.

0 голосов
/ 23 мая 2011

Любой подойдет. В зависимости от JVM, вторая может быть на несколько тактов быстрее, но это будет неизмеримая или незначительная разница. Остерегайтесь этих типов субоптимизации. Если вы не строите систему реального времени, в которой учитывается каждый такт процессора, они просто увеличивают сложность и увеличивают количество источников ошибок.

Я бы предложил использовать конструкцию итератора (как уже было предложено)

For (Flower flower: flowers) { ...

Это ясно, гибко и предсказуемо.

0 голосов
/ 23 мая 2011

переходят к первому только потому, что оба одинаковы, но создают еще одну избыточную переменную int во втором фрагменте кода.

Так что перейдите к первому фрагменту кода

for (int i = 0; i < flowers.size(); i++) {
 ...
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...