Итерировать с помощью цикла for или while? - PullRequest
40 голосов
/ 19 сентября 2008

Я часто вижу код вроде:

Iterator i = list.iterator();
while(i.hasNext()) {
    ...
}

но я пишу это (когда Java 1.5 недоступна или не может использоваться для каждого) как:

for(Iterator i = list.iterator(); i.hasNext(); ) {
    ...
}

потому что

  • короче
  • Сохраняет i в меньшем объеме
  • Уменьшает вероятность путаницы. (i используется вне в то время как? Где объявлено i?

Я думаю, что код должен быть настолько простым для понимания, насколько это возможно, так что мне нужно только создавать сложный код, чтобы делать сложные вещи. Как вы думаете? Что лучше?

От: http://jamesjava.blogspot.com/2006/04/iterating.html

Ответы [ 15 ]

0 голосов
/ 19 сентября 2008

Оба хороши, но помните, что иногда доступ к Итератору напрямую полезен (например, если вы удаляете элементы, которые соответствуют определенному условию - вы получите исключение ConcurrentModificationException, если вы выполните collection.remove (o) внутри for ( T o: коллекция) петля).

Я предпочитаю писать синтаксис for (бла: бла) [foreach] почти все время, потому что он кажется мне более естественным для чтения. Концепция итераторов вообще не имеет параллелей вне программирования

0 голосов
/ 19 сентября 2008

Я был для цикла для ясности. Хотя я использую цикл while , когда сталкиваюсь с каким-то недетерминированным условием.

0 голосов
/ 19 сентября 2008

Я согласен, что цикл for следует использовать всегда, когда это возможно, но иногда в теле цикла используется более сложная логика, управляющая итератором. В этом случае вы должны идти с while.

0 голосов
/ 19 сентября 2008

Хотя оба они действительно хороши, я склонен использовать первый пример, потому что его легче читать.

Меньше операций происходит в каждой строке с циклом while (), что упрощает код для новичка в коде, чтобы понять, что происходит.

Этот тип конструкции также позволяет мне группировать инициализации в общем месте (вверху метода), что также упрощает комментирование для меня и концептуализацию для того, кто читает его впервые.

0 голосов
/ 19 сентября 2008

Либо в порядке. Я использую для () себя, и я не знаю, есть ли проблемы компиляции. Я подозреваю, что они оба оптимизированы почти до одного и того же.

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