цикл foreach создание Java? - PullRequest
       20

цикл foreach создание Java?

1 голос
/ 25 марта 2010

Почему этот цикл был введен в Java? Это создание Java? Какова его цель (повышает эффективность использования памяти / процессора)?

Ответы [ 5 ]

10 голосов
/ 25 марта 2010

Он маскирует использование итераторов, которые тяжелы и неуклюжи в использовании. Есть много, много случаев, когда вы просто хотите перебрать коллекцию, не работая с ее индексом. Структура java foreach делает это возможным.

10 голосов
/ 25 марта 2010

Почему этот цикл был введен в Java?

Это просто для упрощения циклического перебора общих коллекций и массивов. Вместо

for (int i = 0; i < strings.length; i++) {
    String string = strings[i];
    // ...
}

Вы можете просто сделать

for (String string : strings) {
    // ...
}

, что делает код более читабельным и лучше поддерживаемым.

Это создание Java?

Нет, он существовал на других языках задолго до Java. Ява была относительно поздней в реализации.

Какова его цель?

см. Первый ответ.

Чтобы узнать больше об этом, ознакомьтесь с руководством Sun по этому вопросу .

Обновление : это не означает, что другие циклы становятся лишними. цикл for с использованием индекса по-прежнему полезен, если вы хотите сохранить счетчик цикла для других целей, кроме получения элемента по индексу. Цикл for с использованием итератора по-прежнему полезен, если вы хотите удалить или изменить элементы самой коллекции внутри цикла.

3 голосов
/ 25 марта 2010

Пожалуйста, смотрите Foreach :

Для каждого (или каждого) есть компьютер языковая идиома для обхода предметов в Коллекция. Foreach обычно используется вместо стандарта для заявления. В отличие от других для конструкций цикла, однако циклы foreach 1 обычно не поддерживать явный счетчик: они по сути сказать, "сделать это со всем в этом наборе ", а не" сделать это х раз ". Это позволяет избежать потенциала ошибки по одному и делает код проще читать. В объектно-ориентированном языки итератор, даже если неявный, часто используется как средство прохождения.

Несколько языков, включая Python, иметь только цикл foreach, требующий явный подсчет для достижения «стандарт» для поведения.

И, в частности, раздел о Java:

Конструкция foreach была введена в JDK 5.0. Официальные источники используют несколько имен для конструкции. Он называется «расширенный цикл», «цикл для каждого» и «оператор foreach».

2 голосов
/ 25 марта 2010

Это просто имитация Java функциональной конструкции, которая существует намного дольше, она называется map . Причина его реализации заключается в том, что обычно делают цикл, который просто выполняет действие для каждого элемента контейнера, независимо от его индекса. Синтаксис Java for(element : container) { doSomethingWith(element); } - это просто более чистый способ сделать это, чем альтернативы, которые либо создают цикл for с индексом

for(int i=0; i<container.size(); ++i) { doSomethingWith(container.at(i));  }

, который длиннее и создает ненужную индексную переменную, или делает цикл с итератором

Iterator it = container.iterator(); 
while(it.hasNext()) { doSomethingWith(it.next()); }

что тоже дольше. По сути, этот цикл скомпилирован как цикл for( : ) {}, хотя могут быть некоторые небольшие отличия (я фактически не видел байт-код).

0 голосов
/ 25 марта 2010

Обычный "Синтаксический сахар"

Не думайте, что есть какое-либо улучшение эффективности.

Сообщество Java хотело немного модернизировать язык, конкурируя с C # и Ruby ..

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