Java ListIterator 인터페이스 완전 정복: 양방향 순회와 요소 조작
Java ListIterator 인터페이스
이 튜토리얼은 실전 예제와 명확한 설명으로 Java의 ListIterator 인터페이스를 종합적으로 다룹니다.
ListIterator 인터페이스는 Iterator를 확장하며 양방향 순회를 제공하여 List를 앞뒤로 이동하면서 실시간으로 수정을 수행할 수 있게 합니다.
탐색, 제거, 요소 교체 기능을 갖추고 있어 리스트를 다루는 모든 Java 개발자에게 필수적인 도구입니다.
ListIterator 핵심 메서드
hasNext() - 앞에 다른 요소가 있으면 true를 반환합니다.
next() - 다음 요소로 이동하고 반환합니다.
nextIndex() - next()가 반환할 요소의 인덱스를 제공합니다.
previous() - 이전 요소로 이동하고 반환합니다.
previousIndex() - previous()가 반환할 요소의 인덱스를 제공합니다.
remove() - next() 또는 previous()가 마지막으로 반환한 요소를 삭제합니다.
set(E e) - 마지막으로 반환된 요소를 지정된 값으로 교체합니다.
예제 1: 앞으로 탐색하기
아래는 ArrayList에서 next(), nextIndex(), hasNext()를 시연하는 간결한 예제입니다:
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(3);
numbers.add(2);
System.out.println("ArrayList: " + numbers);
ListIterator<Integer> iterator = numbers.listIterator();
int first = iterator.next();
System.out.println("Next Element: " + first);
int nextIndex = iterator.nextIndex();
System.out.println("Position of Next Element: " + nextIndex);
System.out.println("Is there any next element? " + iterator.hasNext());
}
}
실행 결과
ArrayList: [1, 3, 2]
Next Element: 1
Position of Next Element: 1
Is there any next element? true
예제 2: 뒤로 탐색하기
이 예제는 반복자를 두 번 전진시킨 후 previous()와 previousIndex()를 보여줍니다:
import java.util.ArrayList;
import java.util.ListIterator;
class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(3);
numbers.add(2);
System.out.println("ArrayList: " + numbers);
ListIterator<Integer> iterator = numbers.listIterator();
iterator.next();
iterator.next();
int prev = iterator.previous();
System.out.println("Previous Element: " + prev);
int prevIndex = iterator.previousIndex();
System.out.println("Position of the Previous element: " + prevIndex);
}
}
실행 결과
ArrayList: [1, 3, 2]
Previous Element: 3
Position of the Previous Element: 0
초기에는 반복자가 첫 번째 요소 앞에 위치하므로 previous() 호출 시 예외가 발생합니다. 두 번 next() 호출 후 반복자는 3과 2 사이에 위치하므로 previous()가 3을 반환합니다.