Класс ListIterator
Класс ListIterator - это интерфейс из пакета
java.util, который расширяет обычный
Iterator и предназначен специально для
списков (List). В отличие от обычного итератора,
ListIterator умеет двигаться в двух
направлениях: вперед и назад. Кроме того, он
позволяет получать индексы текущих элементов, а
также добавлять, заменять и удалять элементы прямо
во время обхода списка. Получить объект
ListIterator можно с помощью метода
listIterator, который вызывается у самого
списка. Без параметров итератор устанавливается в
начало списка, а если передать индекс - в позицию
с этим индексом.
Синтаксис
ListIterator<E> iterator = list.listIterator();
ListIterator<E> iterator = list.listIterator(index);
Основные методы
Класс ListIterator предоставляет следующие
ключевые методы: hasNext - проверяет, есть
ли следующий элемент; next - возвращает
следующий элемент и сдвигает курсор вперед;
hasPrevious - проверяет, есть ли предыдущий
элемент; previous - возвращает предыдущий
элемент и сдвигает курсор назад; nextIndex
- возвращает индекс следующего элемента;
previousIndex - возвращает индекс предыдущего
элемента; remove - удаляет последний
возвращенный элемент; set - заменяет
последний возвращенный элемент; add -
вставляет элемент перед текущей позицией курсора.
Пример
Давайте создадим список и пройдемся по нему итератором вперед, выводя каждый элемент:
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте пройдемся по тому же списку в обратном
направлении, используя методы hasPrevious
и previous:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e"));
ListIterator<String> iter = list.listIterator(list.size());
while (iter.hasPrevious()) {
System.out.println(iter.previous());
}
}
}
Результат выполнения кода:
"e"
"d"
"c"
"b"
"a"
Пример
Давайте заменим каждый элемент списка на его
индекс, используя метод set:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e"));
ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
int index = iter.nextIndex();
iter.next();
iter.set("" + index);
}
System.out.println(list);
}
}
Результат выполнения кода:
[0, 1, 2, 3, 4]
Пример
Давайте добавим новый элемент в список во время
итерации, используя метод add:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e"));
ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
String element = iter.next();
if (element.equals("c")) {
iter.add("12345");
}
}
System.out.println(list);
}
}
Результат выполнения кода:
[a, b, c, 12345, d, e]
Смотрите также
-
интерфейс
Iterator,
который является базовым итератором коллекций -
метод
hasPrevious,
который проверяет наличие предыдущего элемента -
метод
previous,
который возвращает предыдущий элемент -
метод
add,
который вставляет элемент во время итерации