2015-03-18 2 views
0

Я знаю, что здесь есть много подобных вопросов. Но, похоже, это не обсуждалось ранее.Iterator vs For-Each

В общем, я хочу знать, почему Iterator следует использовать по циклу For-Each, если ни один элемент не будет удален? Итак, в основном просто перебираем по Collection, и единственным используемым модификатором является add.

Я знаю, что Iterator является единственным вариантом сохранения, если элемент удален из Collection. Производительность не является аргументом, потому что For-Each будет преобразован в Итератор компилятором. Iterator более подробный, поэтому +1 до For-Each.

Есть ли какая-либо надежная точка для использования Iterator over For-Every в описанном сценарии?

+2

Я не могу придумать каких-либо веских оснований, поскольку они по сути одно и то же. Я просто думаю, что для каждого выглядит лучше и легче читать. – user489041

+0

Я предполагаю, что для foreach вы имеете в виду 'for (Object o: yourCollection)'? В этом случае вы должны быть осторожны с «ConcurrentModificationException» – Tgsmith61591

+0

@ Tgsmith61591 * «если элемент не будет удален» * – m0skit0

ответ

1

Вы должны использовать Iterator цикл вместо цикла Еогеасп если

  • вы должны быть в состоянии удалить детали во время обработки или
  • вам нужно обработать последний пункт по-другому, чем другие.

Кроме того, Iterator может быть более естественным, если вы хотите, чтобы пропустить элемент, основанный на характеристиках его предыдущего элемента.

Кроме того, для List S, A ListIterator петли может иногда быть более удобной, чем цикл Еогеаспа, так как он может обеспечить индексы предыдущих и последующих элементов, и (даже независимо от индексов) позволяет распознавать первым элемент итерации. Кроме того, вам нужно ListIterator если

  • вы должны заменить элементы в основной List ИЛИ
  • вы когда-либо необходимо создать резервную копию.