Java: сколько раз выражение коллекции оценивается в "foreach" - PullRequest
27 голосов
/ 31 августа 2009

если я делаю это на Java:

for(String s : myCollection.expensiveListGeneration())
{
      doSomething();
}

Вызывается ли дорогой ListGeneration () только один раз в начале или на каждой итерации цикла?

Это зависит от реализации?

Ответы [ 2 ]

38 голосов
/ 31 августа 2009

потому что это эквивалентно использованию итератора, это эквивалентно вызову коллекций '. Метод iterator (), и он вызывается один раз.

22 голосов
/ 31 августа 2009

Он вызывается один раз и не зависит от реализации. Цикл for-each основан на интерфейсе Iterable. Все, что он делает, это вызывает метод iterator() коллекции один раз в начале, а затем работает с этим итератором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...