Цикл с итератором java

Что такое Iterator в Java?

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

Что такое Iterator в Java?

Iterator в Java – это интерфейс, принадлежащий платформе коллекции. Позволяет просматривать коллекцию, получать доступ к элементу данных и удаляет элементы данных коллекции.

Java в основном поддерживает четыре различных курсора. Это именно:

Каждый из этих Java-курсоров имеет свои преимущества и недостатки.

Он также считается универсальным итератором, так как вы можете применить его к любому объекту Collection. Используя Iterator, вы можете выполнять операции чтения и удаления. Это улучшенная версия перечисления с дополнительными функциями элемента.

Методы Iterator

Итератор Java имеет в общей сложности 4 метода. Давайте разберемся с ними подробно.

Methods Description
forEachRemaining(Consumeraction) Он выполняет действия над каждым элементом до тех пор, пока все элементы не будут обработаны. Также до тех пор, пока действие не создаст исключение.
hasNext() Возвращает истинное значение, если во время итерации встречается большое количество элементов.
next() Возвращает следующий указанный элемент во время итерации.
remove() Этот метод удаляет текущий элемент. Создает исключение IllegalStateException, если предпринята попытка вызвать метод remove(), которому не предшествует вызов метода next().
boolean hasNext() Возвращает true, если итерация содержит больше элементов.
class Method < public static void main(String[] args) ArrayListlist = new ArrayList(); list.add("E"); list.add("D"); list.add("U"); list.add("R"); list.add("E"); list.add("K"); list.add("A"); // Iterator to traverse the list Iterator iterator = list.iterator(); System.out.println("List elements : "); while (iterator.hasNext()) System.out.print(iterator.next() + " "); System.out.println(); > >

ListIterator в Java

ListIterator в Java – это итератор, который позволяет пользователям перемещаться по коллекции в обоих направлениях. Он содержит следующие методы:

Читайте также:  Язык html конспект урока
Методы Описание
void add(Object obj) Вставляет obj в список перед элементом, который будет возвращен следующим вызовом функции next ().
boolean hasNext( ) Возвращает true, если есть следующий элемент. В противном случае возвращает false.
boolean hasPrevious( ) Возвращает true, если существует предыдущий элемент. В противном случае возвращает false.
Object next( ) Возвращает следующий элемент. Исключение NoSuchElementException создается, если нет следующего элемента.
int nextIndex( ) Возвращает индекс следующего элемента. Если следующего элемента нет, возвращает размер списка.
Object previous( ) Возвращает предыдущий элемент. Исключение NoSuchElementException создается, если предыдущий элемент отсутствует.
int previousIndex( ) Возвращает индекс предыдущего элемента. Если предыдущий элемент отсутствует, то возвращается значение -1.
void remove( ) Удаляет текущий элемент из списка. IllegalStateException бросается, если remove( ) вызывается перед next( ) или previous( ) вызывается.
void set(Object obj) Присваивает obj текущему элементу. Это последний элемент, возвращаемый вызовом функции next() или previous().
public class Lists < public static void main(String args[]) < // Create an array list ArrayList al = new ArrayList(); // add elements to the array list al.add("E"); al.add("D"); al.add("U"); al.add("R"); al.add("E"); al.add("K"); al.add("A"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) < Object element = itr.next(); System.out.print(element + " "); >System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) < Object element = litr.next(); litr.set(element + "+"); >System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) < Object element = itr.next(); System.out.print(element + " "); >System.out.println(); // Now, display the list backwards System.out.print("Modified list backwards: "); while(litr.hasPrevious()) < Object element = litr.previous(); System.out.print(element + " "); >System.out.println(); > >

Original contents of al : E D U R E K A
Modified contents of al : E + D + U + R + E + K + A+
Modified list backwards : A + K + E + R + U + D + E+

Преимущества

Итератор в Java имеет следующие преимущества.

  • Вы можете использовать эти итераторы для любого класса Collection.
  • Поддерживает операции чтения и удаления.
  • Если вы используете цикл for, вы не можете обновить (добавить / удалить) коллекцию, тогда как с помощью итератора вы можете легко обновить коллекцию.
  • Универсальный для API коллекции.
  • Имена методов очень просты в использовании.

Ограничения

Имеют следующие недостатки:

  • Вы можете выполнять только итерацию в прямом направлении, то есть однонаправленный итератор.
  • Замена и добавление нового элемента не поддерживается.
  • ListIterator – самый мощный, но он применим только для классов, реализованных в List. Так что это не универсальный итератор.
  • Когда вы используете операции CRUD, он не поддерживает операции создания и обновления.
  • Когда вы сравниваете его со Spliterator, он не позволяет выполнять итерацию элементов параллельно. Это означает, что он поддерживает только последовательную итерацию.
  • Он не поддерживает лучшую производительность для итерации большого объема данных.

Источник

Способы перебора списка в Java

Перебор элементов списка — одна из самых распространенных задач в программе.

В этом руководстве мы рассмотрим различные способы сделать это в Java. Мы сосредоточимся на переборе списка по порядку, хотя и в обратном порядке тоже несложно.

2. для цикла​

Во-первых, давайте рассмотрим некоторые параметры цикла for .

Мы начнем с определения списка стран для наших примеров:

 ListString> countries = Arrays.asList("Germany", "Panama", "Australia"); 

2.1. Базовый цикл _ ​

Наиболее распространенным оператором управления потоком для итерации является базовый цикл for .

Цикл for определяет три типа операторов, разделенных точкой с запятой. Первый оператор является оператором инициализации. Второй определяет условие завершения. Последнее утверждение — это предложение обновления.

Здесь мы просто используем целочисленную переменную в качестве индекса:

 for (int i = 0; i  countries.size(); i++)    System.out.println(countries.get(i));   > 

При инициализации мы должны объявить целочисленную переменную, чтобы указать начальную точку. Эта переменная обычно действует как индекс списка.

Условие завершения — это выражение, которое возвращает логическое значение после оценки. Как только это выражение становится ложным, цикл завершается.

Предложение update используется для изменения текущего состояния индексной переменной, увеличения или уменьшения его до точки завершения.

2.2. Улучшено для цикла​

Усовершенствованный цикл for представляет собой простую структуру, которая позволяет нам обращаться к каждому элементу списка. Он похож на базовый цикл for, но более удобочитаем и компактен. Следовательно, это одна из наиболее часто используемых форм для обхода списка.

Обратите внимание, что расширенный цикл for проще, чем базовый цикл for :

 for (String country : countries)    System.out.println(country);   > 

3. Итераторы​

Итератор — это шаблон проектирования, который предлагает нам стандартный интерфейс для обхода структуры данных, не беспокоясь о внутреннем представлении.

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

Следовательно, структура может быть бинарным деревом или двусвязным списком, поскольку Итератор абстрагирует нас от способа выполнения обхода. Таким образом, мы можем легко заменить структуры данных в нашем коде без неприятных проблем.

3.1. Итератор ​

В Java шаблон Iterator отражен в классе java.util.Iterator . Он широко используется в коллекциях Java . В Iterator есть два ключевых метода: hasNext() и next() .

Здесь мы продемонстрируем использование обоих:

 IteratorString> countriesIterator = countries.iterator();    while(countriesIterator.hasNext())    System.out.println(countriesIterator.next());   > 

Метод hasNext() проверяет , остались ли какие-либо элементы в списке .

Метод next() возвращает следующий элемент итерации .

3.2. ListIterator ​

ListIterator позволяет нам перемещаться по списку элементов в прямом или обратном порядке.

Прокрутка списка с помощью ListIterator вперед следует механизму, аналогичному тому, который используется с помощью Iterator . Таким образом, мы можем переместить итератор вперед с помощью метода next() и найти конец списка с помощью метода hasNext() .

Как мы видим, ListIterator очень похож на итератор , который мы использовали ранее:

 ListIteratorString> listIterator = countries.listIterator();    while(listIterator.hasNext())    System.out.println(listIterator.next());   > 

4. для каждого() ​

4.1. Итерабельный.для каждого() ​

Начиная с Java 8, мы можем использовать метод forEach() для перебора элементов списка . Этот метод определен в интерфейсе Iterable и может принимать лямбда-выражения в качестве параметра.

 countries.forEach(System.out::println); 

До появления функции forEach все итераторы в Java были активны, то есть они включали цикл for или while, который обходил сбор данных до тех пор, пока не выполнялось определенное условие.

С введением forEach в качестве функции в интерфейсе Iterable все классы, реализующие Iterable , имеют добавленную функцию forEach .

4.2. Stream.forEach() ​

Мы также можем преобразовать набор значений в поток и получить доступ к таким операциям, как forEach() , map() и filter().

Здесь мы продемонстрируем типичное использование потоков:

 countries.stream().forEach((c) -> System.out.println(c)); 

5. Вывод​

В этой статье мы продемонстрировали различные способы перебора элементов списка с помощью Java API. Эти параметры включали цикл for , расширенный цикл for , Iterator , ListIterator и метод forEach() (включенный в Java 8).

Затем мы узнали, как использовать метод forEach() с потоками .

Наконец, весь код, используемый в этой статье, доступен в нашем репозитории Github .

Источник

Оцените статью