Метод listIterator
Метод listIterator возвращает специальный объект
ListIterator, который предназначен для
двунаправленного обхода элементов списка ArrayList.
В отличие от обычного итератора, полученного через метод
iterator, данный итератор умеет двигаться не только
вперед, но и назад. Метод может быть вызван без параметров
(тогда итератор устанавливается в начало списка) или с
одним целочисленным параметром - индексом, с которого
начнется обход.
Синтаксис
list.listIterator()
list.listIterator(index)
Пример
Давайте создадим список и получим его итератор,
установленный в начало. Пройдемся по элементам
в прямом направлении с помощью метода hasNext
и next:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e"));
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.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)
{
ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e"));
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
iterator.next();
}
while (iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
Результат выполнения кода:
"e"
"d"
"c"
"b"
"a"
Пример
Метод listIterator можно также использовать
для изменения элементов прямо во время обхода.
Давайте заменим каждый элемент списка на его
длину:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<>(List.of("abcde", "12345"));
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
iterator.set(String.valueOf(element.length()));
}
System.out.println(list);
}
}
Результат выполнения кода:
[5, 5]