Java Iterator
Java Iterator — это механизм в Java Collections Framework и интерфейс, используемый для обхода коллекций (таких как списки, множества и карты и т. д.).
Он предоставляет единый способ доступа к элементам коллекции без необходимости понимать конкретные детали реализации нижележащей коллекции.
Java Iterator — это не коллекция; это способ доступа к коллекциям, и его можно использовать для перебораArrayListиHashSetи другие коллекции.
Iterator — это простейшая реализация итератора Java. ListIterator — это интерфейс в Collection API, который расширяет интерфейс Iterator.

Интерфейс Iterator определяет несколько методов. Три наиболее часто используемых:
next()— Возвращает следующий элемент итератора и перемещает указатель итератора на следующую позицию.
hasNext()— Используется для определения, есть ли в коллекции следующий элемент, к которому можно получить доступ.
remove()- Удаляет последний элемент, к которому обращался итератор, из коллекции (необязательная операция).
Класс Iterator находится в пакете java.util. Его нужно импортировать перед использованием. Синтаксис следующий:
import java.util.Iterator; // 引入 Iterator 类
Используя итератор, мы можем получать доступ к элементам коллекции по одному без использования традиционных циклов for или индексов. Этот подход более краток и гибок, и он работает для различных типов коллекций.
Получение итератора
Чтобы получить итератор из коллекции, можно использовать метод iterator():
Пример
import java.util.ArrayList;
import java.util.Iterator;
public class ExampleTest {
public static void main(String[] args) {
// Создайте коллекцию
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
// Получить итератор
Iterator<String> it = sites.iterator();
// Выведите первый элемент коллекции
System.out.println(it.next());
}
}
Выполнение приведенного выше кода дает следующий вывод:
При использовании итератора для обхода коллекции, если коллекция изменяется во время обхода (например, при добавлении или удалении элементов), это может вызвать ConcurrentModificationException. Чтобы избежать этой проблемы, можно использовать собственныйremove()метод для выполнения операций удаления.
Перебор элементов коллекции
Самый простой способ заставить итератор it возвращать все элементы коллекции по одному — использовать цикл while:
while(it.hasNext()) {
System.out.println(it.next());
}
Следующий код выводит все элементы коллекции sites:
Пример
import java.util.ArrayList;
import java.util.Iterator;
public class ExampleTest {
public static void main(String[] args) {
// Создайте коллекцию
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
// Получить итератор
Iterator<String> it = sites.iterator();
// Вывести все элементы коллекции
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
Выполнение приведенного выше кода дает следующий вывод:
Google Example Taobao Zhihu
Удаление элементов
Чтобы удалить элементы из коллекции, можно использовать метод remove().
В следующем примере мы удаляем элементы меньше 10 из коллекции:
Пример
import java.util.ArrayList;
import java.util.Iterator;
public class ExampleTest {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
Integer i = it.next();
if(i < 10) {
it.remove(); // Удалить элементы меньше 10
}
}
System.out.println(numbers);
}
}
Выполнение приведенного выше кода дает следующий вывод:
[12, 23]
Примечание:Итератор Java — это механизм одностороннего обхода, означающий, что он может обходить элементы коллекции только от начала к концу и не может обходить в обратном направлении. Кроме того, при использовании итератора для обхода коллекции нельзя напрямую изменять элементы коллекции; вместо этого нужно использовать метод remove() итератора для удаления текущего элемента.
Другие расширения
Java Collections Framework