2013-05-02 2 views
-2

Рассмотрим простой Java для цикла:Свойства Java для цикла

for (int x = 0; x < bigArray.size(); x++) { 
    Someobject object = (Someobject) bigArray.get(x); 
     process(object); 
} 

private void process(Someobject object) { 
    Someobject newobject = moreProcessing(object); 
    bigArray.add(newobject); 
} 

Мое наблюдение состоит в том, что цикл закончится, даже если я добавляю дополнительные объекты к концу BigArray и BigArray постоянно становится все больше , Это связано с тем, что JRE фиксирует значение тестового условия (в данном случае x < bigArray.size()) до начала цикла for и никогда не обновляет это значение?

+2

какого типа 'bigArray'? –

+0

Вы уверены, что это выходит? –

+0

Если это был массив, такая оптимизация имеет смысл .. для списка (не так много) .. интересно .. вы уверены, что это массив? –

ответ

0

Единственная проблема, которую я вижу с ФП, что для пустого bigArray типа List цикл завершится, так как он должен вызвать process внутри цикла, чтобы добавить элементы и увеличить size, следовательно, условие в цикл становится true но size - 0 в этой точке.
Если список не пуст, то x < bigArray.size() всегда будет сравниваться с последней длиной, включая объекты, добавленные в process.
Я предполагаю, что bigArray имеет тип java.util.List

0

В большинстве случаев условия испытания будут оцениваться перед началом каждой итерации.

More here

+0

, но, надеюсь, не в таких случаях, как указано в вопросе. – dantuch

Смежные вопросы