Java для цикла против цикла while. Разница в производительности?

Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed)) .

В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .

Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.

Итак, это вопрос выравнивания в основном.

У вас должны быть веские причины для его изменения.

25
задан jjnguy 22 July 2009 в 14:22
поделиться

9 ответов

Нет, изменение типа петли не имеет значения.

Единственное, что может сделать это быстрее, это иметь меньше вложенности циклов и циклически перебирать меньшие значения.

Единственная разница между циклом for и циклом while заключается в синтаксисе их определения. Там нет никакой разницы в производительности вообще.

int i = 0;
while (i < 20){
    // do stuff
    i++;
}

То же самое, что:

for (int i = 0; i < 20; i++){
    // do Stuff
}

(На самом деле цикл for немного лучше, потому что i будет вне области видимости после цикла, а i будет придерживаться примерно в случае цикла while.)

Цикл for - это синтаксически более симпатичный способ зацикливания.

54
ответ дан jjnguy 22 July 2009 в 14:22
поделиться

В то время как цикл Loop и For одинаковы

http://www.mkyong.com/java/ while-loop-for-loop-and-iterator-performance-test-java/

0
ответ дан Abhishek Gaikwad 22 July 2009 в 14:22
поделиться

Это имеет значение, только если вы используете многопоточное или многопроцессорное программирование. Тогда это также зависит от того, как вы назначаете циклы различным процессорам / потокам.

0
ответ дан Extrakun 22 July 2009 в 14:22
поделиться

Посмотри на свой алгоритм! Знаете ли вы заранее, какие значения из вашего массива добавляются более одного раза?

Если вы знаете, что можете уменьшить количество циклов и это приведет к лучшей производительности.

1
ответ дан Roalt 22 July 2009 в 14:22
поделиться

Даже если бы гипотеза о том, что цикл while быстрее, чем цикл for, была верной (а это не так), циклы, которые вам пришлось бы изменять / оптимизировать, были бы не внешними, а внутренними, потому что они выполняется больше раз.

2
ответ дан fortran 22 July 2009 в 14:22
поделиться

Вы не можете оптимизировать его, изменив его на while.

Вы можете просто увеличить скорость очень, очень, очень мало, изменив линию

for (int k = 0; k < length - 1; k++) {

на

for (int k = 0; k < lengthMinusOne; k++) {

, где lengthMinusOne вычисляется до

, это вычитание равно просто вычисляю почти (200x201 / 2) x (200-1) раз, а для компьютера это очень мало:)

10
ответ дан ufukgun 22 July 2009 в 14:22
поделиться

Нет, вы все еще повторяете в цикле точно такое же число раз. Это не имело бы никакого значения.

1
ответ дан 28 November 2019 в 00:38
поделиться

The difference between for and while is semantic :

  • In a while loop, you will loop as long as the condition is true, which can vary a lot, because you might, in your loop, modify variables using in evluating the while condition.
  • Usually, in a for loop, you loop N time. This N can be variable, but doesn't move until the end of your N loop, as usually developpers doesn't modify variables evaluated in the loop condition.

It is a way to help other to understand your code. You are not obliged not to modify for loop variables, but it is a common (and good) practice.

2
ответ дан 28 November 2019 в 00:38
поделиться

Такая микрооптимизация бессмысленна.

  • Цикл while не будет быстрее.
  • Структура цикла не ваше узкое место.
  • Сначала оптимизируйте свой алгоритм.
  • Еще лучше, не оптимизируйте сначала. Оптимизируйте только после того, как вы обнаружите, что у вас действительно есть узкое место в вашем алгоритме, которое не зависит от ввода-вывода.
30
ответ дан 28 November 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: