JAVA/포스팅

자바 컬렉션 프레임워크 ListIterator

짜집퍼박사(짜박) 2023. 11. 18. 00:51

ListIterator는 Iterator의 확장 버전으로, 양방향으로 순회할 수 있는 기능을 제공합니다. ListIterator는 주로 List 인터페이스를 구현한 컬렉션 (예: ArrayList, LinkedList)에서 사용됩니다.

 

주요 메서드

ListIterator 인터페이스는 Iterator와 비슷한 메서드를 가지며, 추가적으로 양방향 순회 및 요소의 추가, 수정, 삭제를 지원하는 메서드들이 있습니다.

 

- boolean hasNext(): 다음 요소가 존재하는지 확인하고, 존재하면 true를 반환합니다.
- E next(): 다음 요소를 반환하고 커서를 다음 위치로 이동합니다. 만약 더 이상 다음 요소가 없으면 - NoSuchElementException을 발생시킵니다.
- boolean hasPrevious(): 이전 요소가 존재하는지 확인하고, 존재하면 true를 반환합니다.
- E previous(): 이전 요소를 반환하고 커서를 이전 위치로 이동합니다. 만약 더 이상 이전 요소가 없으면 NoSuchElementException을 발생시킵니다.
- int nextIndex(): 다음 요소의 인덱스를 반환합니다.
- int previousIndex(): 이전 요소의 인덱스를 반환합니다.
- void remove(): 최근에 반환된 요소를 제거합니다.
- void set(E e): 최근에 반환된 요소를 주어진 요소로 교체합니다.
- void add(E e): 현재 위치에 주어진 요소를 추가합니다.

 

사용 예제

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        // List에 데이터 추가
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        // ListIterator를 사용하여 리스트 순회
        ListIterator<String> iterator = list.listIterator();

        // 순방향으로 순회하면서 출력
        System.out.println("Forward traversal:");
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);

            // "Banana"를 만나면 "Grapes" 추가
            if (element.equals("Banana")) {
                iterator.add("Grapes");
            }
        }

        // 역방향으로 순회하면서 출력
        System.out.println("\nBackward traversal:");
        while (iterator.hasPrevious()) {
            String element = iterator.previous();
            System.out.println(element);
        }
    }
}

위 예제에서는 ArrayList를 생성하고, listIterator() 메서드를 호출하여 리스트의 ListIterator를 얻어옵니다. 그리고 순방향으로 순회하면서 "Banana"를 만나면 "Grapes"를 추가하고, 역방향으로 순회하면서 출력합니다. ListIterator를 사용하면 순방향과 역방향으로 자유롭게 이동하면서 요소를 조작할 수 있습니다.

 

With ChatGPT