Подтвердить что ты не робот

IntelliJ предлагает заменить цикл while на a для каждого цикла. Зачем?

    ArrayList<Object> list = new ArrayList<Object>();
    list.add(12);
    list.add("Hello");
    list.add(true);
    list.add('c');

    Iterator iterator = list.iterator();
    while(iterator.hasNext())
    {
        System.out.println(iterator.next().toString());
    }

Когда я ввожу этот код Java в IntelliJ IDEA, функция анализа кода предполагает, что я заменяю цикл while на каждый цикл, поскольку я выполняю итерацию в коллекции. Почему это?

4b9b3361

Ответ 1

Это то, что вы хотите использовать:

for (Object o : list)
{
    System.out.println(o.toString());
}

Это было на языке с Java 1.5 и является идиоматическим шаблоном. Вам нужен Iterator, только если вам нужен доступ к итератору других методов (т.е. remove()).

Ответ 2

Потому что вы менее склонны ошибаться, и это выглядит лучше; )

for( Object obj : list ) {
  System.out.println( obj.toString() );
}

Ответ 3

потому что у вас есть проверка Java Migration Aids - цикл while, заменяемый "для каждого" активным (по умолчанию), описание

Этот отчет об инспекции для циклов, которые перебирают коллекции или массивов и может быть заменен синтаксисом "для каждого" итерации, доступно на Java 5 и новее. Установочный отчет java.util.List индексированные петли отвечают за поиск циклов, связанных с list.get(index). Эти петли обычно можно заменить на foreach, если они не изменяют базовый список в процессе, например. путем вызова list.remove(index). Если последнее имеет место, для любой формы loop может вызывать ConcurrentModificationException. Только эта проверка отчеты, если проект или модуль настроен на использование уровня языка от 5.0 или выше.

поэтому, если вы не хотите, чтобы вам сказали об этом, снимите этот флажок в конфигурации Inspections

Ответ 4

Цикл foreach короче для записи и, следовательно, его легче читать.