MyTetra Share
Делитесь знаниями!
Итераторы
Время создания: 01.11.2019 09:33
Раздел: INFO - Development - JAVA - Collection
Запись: wwwlir/Tetra/master/base/1572572032ic0x3wpv41/text.html на raw.githubusercontent.com

Одним из ключевых методов интерфейса Collection является метод Iterator<E> iterator(). Он возвращает итератор - то есть объект, реализующий интерфейс Iterator.

Интерфейс Iterator имеет следующее определение:


1

2

3

4

5

6

public interface Iterator <E>{

     

    E next();

    boolean hasNext();

    void remove();

}

Реализация интерфейса предполагает, что с помощью вызова метода next() можно получить следующий элемент. С помощью метода hasNext() можно узнать, есть ли следующий элемент, и не достигнут ли конец коллекции. И если элементы еще имеются, то hasNext() вернет значение true. Метод hasNext() следует вызывать перед методом next(), так как при достижении конца коллекции метод next() выбрасывает исключение NoSuchElementException. И метод remove() удаляет текущий элемент, который был получен последним вызовом next().

Используем итератор для перебора коллекции ArrayList:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import java.util.*;

 

public class Program {

 

    public static void main(String[] args) {

         

        ArrayList<String> states = new ArrayList<String>();

        states.add("Germany");

        states.add("France");

        states.add("Italy");

        states.add("Spain");

         

        Iterator<String> iter = states.iterator();

        while(iter.hasNext()){

         

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

        }

    }

}

Интерфейс Iterator предоставляет ограниченный функционал. Гораздо больший набор методов предоставляет другой итератор - интерфейс ListIterator. Данный итератор используется классами, реализующими интерфейс List, то есть классами LinkedList, ArrayList и др.

Интерфейс ListIterator расширяет интерфейс Iterator и определяет ряд дополнительных методов:

  • void add(E obj): вставляет объект obj перед элементом, который должен быть возвращен следующим вызовом next()
  • boolean hasNext(): возвращает true, если в коллекции имеется следующий элемент, иначе возвращает false
  • boolean hasPrevious(): возвращает true, если в коллекции имеется предыдущий элемент, иначе возвращает false
  • E next(): возвращает текущий элемент и переходит к следующему, если такого нет, то генерируется исключение NoSuchElementException
  • E previous(): возвращает текущий элемент и переходит к предыдущему, если такого нет, то генерируется исключение NoSuchElementException
  • int nextIndex(): возвращает индекс следующего элемента. Если такого нет, то возвращается размер списка
  • int previousIndex(): возвращает индекс предыдущего элемента. Если такого нет, то возвращается число -1
  • void remove(): удаляет текущий элемент из списка. Таким образом, этот метод должен быть вызван после методов next() или previous(), иначе будет сгенерировано исключение IlligalStateException
  • void set(E obj): присваивает текущему элементу, выбранному вызовом методов next() или previous(), ссылку на объект obj

Используем ListIterator:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import java.util.*;

 

public class Program {

 

    public static void main(String[] args) {

         

        ArrayList<String> states = new ArrayList<String>();

        states.add("Germany");

        states.add("France");

        states.add("Italy");

        states.add("Spain");

         

        ListIterator<String> listIter = states.listIterator();

         

        while(listIter.hasNext()){

         

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

        }

        // сейчас текущий элемент - Испания

        // изменим значение этого элемента

        listIter.set("Португалия");

        // пройдемся по элементам в обратном порядке

        while(listIter.hasPrevious()){

         

            System.out.println(listIter.previous());

        }   

    }

}


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования