Правильный синтаксис для цикла for:
for (Iterator it = ...; it.hasNext(); ){
//...
}
(Предыдущее объявление в вашем коде является излишним, равно как и лишняя точка с запятой в заголовке цикла for.)
Независимо от того, используете ли вы этот синтаксис или цикл while
, дело вкуса, и то и другое в точности соответствует. Общий синтаксис цикла for:
for (<init stmt>; <loop cond>; <iterate stmt>) { <body>; }
, что эквивалентно:
<init stmt>;
while (<loop cond>) { <body>; <iterate stmt>; }
Редактировать: На самом деле, две вышеуказанные формы не полностью эквивалентны, , если (как в вопросе), переменная объявляется с помощью оператора init. В этом случае будет разница в области действия переменной итератора. При использовании цикла for область действия ограничена самим циклом, в случае цикла while, однако область действия распространяется до конца включающего блока (что не вызывает большого удивления, поскольку объявление находится вне цикла).
Кроме того, как отмечали другие, в более новых версиях Java существует сокращенная запись цикла for:
for (Iterator<Foo> it = myIterable.iterator(); it.hasNext(); ) {
Foo foo = it.next();
//...
}
можно записать как:
for (Foo foo : myIterable) {
//...
}
С помощью этой формы вы, конечно, потеряете прямую ссылку на итератор, что необходимо, например, если вы хотите удалить элементы из коллекции во время итерации.