Рубрики
Без рубрики

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

Просмотрите различные способы перебора списка в Java

Автор оригинала: baeldung.

1. введение

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

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

2. для петли

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

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

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

2.1. Базовый для цикла

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

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

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

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

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

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

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

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

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

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

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

3. Итераторы

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

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

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

3.1. Итератор

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

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

Iterator countriesIterator = countries.iterator();

while(countriesIterator.hasNext()) {
    System.out.println(countriesIterator.next()); 
}

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

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

3.2. Листератор

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

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

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

ListIterator listIterator = countries.listIterator();

while(listIterator.hasNext()) {
    System.out.println(listIterator.next());
}

4. forEach()

4.1. Повторяемость.инструкция foreach()

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

Синтаксис довольно прост:

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

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

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

4.2. Поток.()

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

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

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

5. Заключение

В этой статье мы показали различные способы перебора элементов списка с помощью Java API. Среди них мы упомянули цикл for , расширенный цикл for , итератор , ЛистИтератор и метод forEach () (включен в Java 8).

Кроме того, мы также показали, как использовать метод forEach() с потоками .

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