Рубрики

Извлечение элементов из коллекции в Java (For-each, Iterator, ListIterator & EnumerationIterator)

Условие: сбор на Java
Ниже приведены 4 способа получения любых элементов из объекта коллекции:

Для каждого

Для каждого цикла предназначен для прохождения предметов в коллекции.

// Iterating over collection 'c' using for-each 
   for (Element e: c)
       System.out.println(e);

Мы читаем «:», используемый в цикле for-each, как «in». Таким образом, цикл читается как «для каждого элемента e в элементах», здесь elements — это коллекция, в которой хранятся элементы типа Element.

Примечание. В Java 8 с использованием лямбда-выражений мы можем просто заменить цикл for-each на

elements.forEach (e -> System.out.println(e) );

Использование курсоров

Курсор является интерфейсом и используется для извлечения данных из объекта коллекции, один за другим. Курсор имеет 3 типа, которые приведены ниже:

  1. Интерфейс итератора : итератор — это интерфейс, предоставляемый структурой коллекции для обхода коллекции и для последовательного доступа к элементам в коллекции.
       
       // Iterating over collection 'c' using terator
       for (Iterator i = c.iterator(); i.hasNext(); ) 
           System.out.println(i.next());
    

    Есть 3 метода:

    • boolean hasNext (): этот метод возвращает true, если итератор имеет больше элементов.
    • elements next () : Этот метод возвращает следующие элементы в итераторе.
    • void remove () : этот метод удаляет из коллекции последние элементы, возвращенные итератором.

    // Java-программа для демонстрации работы итераторов

    import java.util.*;

    public class IteratorDemo

    {

        public static void main(String args[])

        {

            // создаем Hashset для хранения строк

            HashSet<String> hs = new HashSet<String>() ;

      

            // сохраняем некоторые строковые элементы

            hs.add("India");

            hs.add ("America");

            hs.add("Japan");

      

            // Добавить итератор в hs.

            Iterator it = hs.iterator();

      

            // Отображать элемент за элементом, используя Iterator

            while (it.hasNext())

                System.out.println(it.next());

        }

    }

    Выход:

    America
    Japan
    India

    Обратитесь Итератор против For-each для различий между итератором и для-каждого.

  2. Интерфейс ListIterator : это интерфейс, который содержит методы для извлечения элементов из объекта коллекции, как в прямом, так и в обратном направлении . Этот итератор предназначен для коллекций на основе списка.
    Он имеет следующие важные методы:
    • booleanhasNext () : Возвращает true, если ListIterator имеет больше элементов при обходе списка в прямом направлении.
    • booleanhasPrevious () : возвращает значение true, если ListIterator имеет больше элементов при обходе списка в обратном направлении.
    • элемент next () : возвращает следующий элемент в списке.
    • element previous () : возвращает предыдущий элемент в списке.
    • void remove () : удаляет из списка последние элементы, которые были возвращены методами next () или previous ().
    • int nextIndex () Возвращает индекс элемента, который будет возвращен последующим вызовом next (). (Возвращает размер списка, если итератор списка находится в конце списка.)
    • int previousIndex () Возвращает индекс элемента, который будет возвращен последующим вызовом previous (). (Возвращает -1, если итератор списка находится в начале списка.)

    Источник: ListIterator Oracle Docs

    Чем Iterator отличается от ListIterator?

    Итератор может извлекать элементы только в прямом направлении. Но ListIterator также может извлекать элементы в прямом и обратном направлении. Поэтому ListIterator предпочтительнее Iterator.

    Используя ListItarator, мы можем получить текущую позицию итератора

    Поскольку ListIterator может обращаться к элементам в обоих направлениях и поддерживает дополнительные операторы, ListIterator не может применяться к Set (например, HashSet и TreeSet. См. Это ). Однако мы можем использовать LisIterator с вектором и списком (например, ArrayList).

    // Java-программа для демонстрации работы ListIterator

    import java. util.* ;

      

    class Test

    {

        public static void main(String args[])

        {

            // взять вектор для хранения целочисленных объектов

            Vector<Integer> v = new Vector<Integer>();

      

            // Добавление элементов в вектор

            v.add(10);

            v.add(20);

            v.add(30);

      

            // Создание ListIterator

            ListIterator lit = v.listIterator();

            System.out.println("In Forward direction:");

      

            while (lit.hasNext())

                System.out.print(lit.next()+" ") ;

      

            System.out.print("\n\nIn backward direction:\n") ;

            while (lit.hasPrevious())

                System.out.print(lit.previous()+" ");

        }

    }

  3. Выход :

    In Forward direction:
    10 20 30 
    
    In backward direction:
    30 20 10 
  4. Интерфейс EnumerationIterator : интерфейс полезен для получения одного за другим элемента. Этот итератор основан на данных из перечисления и имеет методы:
    • booleanhasMoreElements () : Этот метод проверяет, есть ли в перечислении больше элементов или нет.
    • element nextElement () : возвращает следующий элемент, доступный в элементах, доступных в перечислении

    В чем разница между Итератором и Перечислением?

    Итератор имеет возможность удалять элементы из коллекции, которая недоступна в Enumeration. Кроме того, у Iterator есть методы, имена которых легко отслеживать, а методы перечисления трудно запомнить.

    import java.util.Vector;

    import java.util.Enumeration;

    public class Test

    {

        public static void main(String args[])

        {

            Vector dayNames = new Vector();

            dayNames.add("Sunday");

            dayNames.add("Monday");

            dayNames.add("Tuesday");

            dayNames.add("Wednesday");

            dayNames.add("Thursday");

            dayNames.add("Friday");

            dayNames.add("Saturday");

      

            // Создание перечисления

            Enumeration days = dayNames.elements();

      

            // Получение элементов перечисления

            while (days.hasMoreElements())

                System.out.println(days.nextElement());

        }

    }

    Выход:

     Воскресенье
    понедельник
    вторник
    среда
    Четверг
    пятница
    суббота 

Статьи по Теме:
Итераторы в Java
Итератор против Foreach в Java

Эта статья предоставлена Nishant Sharma. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Извлечение элементов из коллекции в Java (For-each, Iterator, ListIterator & EnumerationIterator)

0.00 (0%) 0 votes