728x90

'Java에서는 Collection FreamWork를 제공하고 있는데 할당된 element를 읽는 경우 Iterator로 표준화하고 있다. 그렇기 때문에 Collection Interface에서 상속받는 List 또는 Set Interface에서 Iterator 메서드를 사용할 수 있다.' 아마 여기까지는 모두 알고 있는 내용일 것이다. 이번 포스팅은 두 구조의 차이 및 예제를 통한 사용방법에 대한 내용이다.


두 자료구조의 큰 차이점은 Iterator는 단방향 구조이고 ListIterator는 양방향 구조이다. 이 단방향과 양방향이 무엇을 의미하는지 두 자료구조의 사용예제를 통해 이해 해보자.

 

1. Iterator와 ListIterator의 차이

 1) Iterator 예제 코드

import java.util.Iterator;
import java.util.LinkedList;

public class CodeExTest {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        Iterator<Integer> iter = list.iterator();
        while(iter.hasNext()) { // 다음 값을 가지고 있는 경우 true 반환
            System.out.println(iter.next()); // 다음 값을 출력
        }
    }
}

// result
// 1 2 3 4

 2) ListItertator 예제 코드

import java.util.LinkedList;
import java.util.ListIterator;

public class CodeExTest {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        ListIterator<Integer> iter = list.listIterator();
        while (iter.hasNext()) { // Iterator와 같다.
            System.out.print(iter.next() + " ");
        }
        System.out.println();
        while (iter.hasPrevious()) { // 이전 값을 가지고 있으면 true 반환
            System.out.print(iter.previous() + " "); // 이전 값 출력
        }
    }
}
// result
// 1 2 3 4
// 4 3 2 1

 - Iterator는 next 기능만 제공한다. 하지만 ListIterator는 previous 기능을 제공하기 때문에 next로 갔던 길을 previous로 돌아올 수 있다. 

 

2. 특징

 - 해당 자료구조의 가장 큰 특징은 필요한 위치의 노드를 읽는 경우 현재 위치의 앞뒤에 있다면 처음부터 검색하지 않아도 된다는 것이다. 이렇게 되면 로직을 구현할 때 복잡도가 O(1)이 된다.

 

728x90
TOP