Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java의 Iterator vs ListIterator: 핵심 차이점 완벽 정리

Iterator는 Java의 인터페이스로, 리스트의 요소를 순방향(앞에서 뒤로)으로만 탐색할 수 있습니다. 반면 ListIteratorIterator 인터페이스를 확장한 인터페이스로, 요소를 순방향과 역방향 양쪽 모두로 탐색할 수 있다는 점이 가장 큰 차이입니다.

Iterator와 ListIterator의 주요 차이점

두 인터페이스의 차이를 명확히 이해하려면 다음 세 가지 관점에서 비교해 보는 것이 좋습니다.

1. 사용 가능한 컬렉션

IteratorList, Set, Queue 등 대부분의 컬렉션에서 사용할 수 있습니다. 반면 ListIterator는 이름 그대로 List 컬렉션에서만 사용할 수 있습니다.

2. 탐색 방향

Iterator는 순방향 탐색만 지원하지만, ListIterator는 순방향과 역방향 탐색을 모두 지원합니다.

3. 주요 메서드

Iterator의 핵심 메서드는 hasNext(), next(), remove()입니다. ListIterator는 여기에 더해 add(), hasPrevious(), previous() 등의 메서드를 추가로 제공하여 요소의 삽입과 역방향 탐색이 가능합니다.

Iterator 문법

public interface Iterator<E>

Iterator 사용 예제

import java.util.*;
public class IteratorTest {
    public static void main(String[] args) {
        List<String> listObject = new ArrayList<String>();
        listObject.add("India");
        listObject.add("Australia");
        listObject.add("England");
        listObject.add("Bangladesh");
        listObject.add("South Africa");
        Iterator it = listObject.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

실행 결과

India
Australia
England
Bangladesh
South Africa

위 예제에서 iterator() 메서드로 Iterator 객체를 얻은 후, hasNext()로 다음 요소가 있는지 확인하고 next()로 요소를 하나씩 가져오는 전형적인 순방향 탐색 패턴을 볼 수 있습니다.

ListIterator 문법

public interface ListIterator<E> extends Iterator<E>

ListIterator 사용 예제

import java.util.*;
public class ListIteratorTest {
    public static void main(String[] args) {
        List<String> listObject = new ArrayList<String>();
        listObject.add("Java");
        listObject.add("Selenium");
        listObject.add("Python");
        listObject.add("Java Script");
        listObject.add("Cloud Computing");
        ListIterator it = listObject.listIterator();
        System.out.println("Iterating the elements in forward direction: ");
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("--------------------------------------------");
        System.out.println("Iterating the elements in backward direction: ");
        while (it.hasPrevious()) {
            System.out.println(it.previous());
        }
    }
}

실행 결과

Iterating the elements in forward direction:
Java
Selenium
Python
Java Script
Cloud Computing
-----------------------------------------------
Iterating the elements in backward direction:
Cloud Computing
Java Script
Python
Selenium
Java

ListIterator는 먼저 hasNext()next()로 끝까지 순방향 탐색을 진행한 뒤, 커서가 리스트의 마지막에 위치한 상태에서 hasPrevious()previous()를 사용해 역방향으로 다시 탐색합니다. 이처럼 양방향 탐색이 필요한 경우에 ListIterator가 유용하게 활용됩니다.

정리

단순히 앞에서 뒤로 요소를 순회하는 것이 목적이라면 Set, Queue 등 어디서든 사용 가능한 Iterator면 충분합니다. 하지만 리스트를 양방향으로 탐색하거나, 탐색 중에 요소를 추가·수정해야 한다면 ListIterator를 사용하는 것이 적합합니다.