CS/Algorithm

[Algorithm/Java] Iterator, ListIterator

칸타탓 2020. 11. 14. 22:19

Java의 Iterator, ListIterator

* Iterator<E>

컬렉션 프레임워크에서 저장된 요소를 읽어오는 방법을 표준화하기 위해 사용한다.

Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다.

Collection 인터페이스를 상속받는 List와 Set 인터페이스 또한 iterator() 메소드를 사용할 수 있습니다. (Map 제외)

 

- List 데이터를 반복하는 방법

1. for( int i =0; i<list.length; i++) { ... }

2. for( String str : list ) { ... }

3. Iterator<String> iter = list.iterator();

    while(iter.hasNext()) { System.out.println(iter.next()); }

 

- Map 자료구조에서 사용하기

Set<String> keys = map.keySet(); // Map의 Key를 가져온다
Iterator<String> iter = keys.iterator(); // Set 자료구조를 통해 사용
while(iter.hasNext()) {
    String key = iter.next();
    System.out.printf(key, map.get(key));
}

 

- 관련 메서드

hasNext() iteration이 다음 요소를 가지고 있는지 boolean 형태로 반환
next() iteration의 다음 요소를 반환
remove() 해당 반복자로 반환되는 마지막 요소를 현재 컬렉션에서 제거 

 


* ListIterator<E>

Iterator 인터페이스를 상속받아 여러 기능을 추가한 인터페이스이다.

Iterator 인터페이스는 컬렉션의 요소에 접근할 때 한 방향으로만 이동할 수 있다.

ListIterator 인터페이스는 컬렉션 요소의 대체, 추가, 인덱스 검색 등을 위한 작업에서 양방향으로 이동하는 것을 지원한다.

단, List 인터페이스를 구현한 List 컬렉션 클래스에서만 listIterator() 메소드를 통해 사용할 수 있다.

 

- 순방향 및 역방향 출력

LinkedList<Integer> lnkList = new LinkedList<Integer>();
lnkList.add(4);
lnkList.add(2);
lnkList.add(3);
lnkList.add(1);

ListIterator<Integer> iter = lnkList.listIterator();
while (iter.hasNext()) { // 순방향
    System.out.print(iter.next() + " ");
}

while (iter.hasPrevious()) { // 역방향
    System.out.print(iter.previous() + " ");
}

 

- 관련 메서드

void add(E e) 해당 리스트에 전달된 요소를 추가
boolean hasNext() 해당 리스트를 순방향으로 순회할 때 다음 요소를 가지고 있으면 true 반환, 더 이상 다음 요소를 가지고 있지 않으면 false 반환
boolean hasPrevious() 해당 리스트를 역방향으로 순회할 때 다음 요소를 가지고 있으면 true 반환, 더 이상 다음 요소를 가지고 있지 않으면 false 반환
E next() 리스트의 다음 요소를 반환하고, 커서의 위치를 순방향으로 이동
int nextIndex() 다음 next() 메소드를 호출하면 반환될 요소의 인덱스 반환
E previous() 리스트의 이전 요소를 반환하고, 커서의 위치를 역방향으로 이동
int previousIndex() 다음 previous() 메소드를 호출하면 반환될 요소의 인덱스 반환
void remove() next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 리스트에서 제거
void set(E e) next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 전달된 객체로 대체

 

'CS > Algorithm' 카테고리의 다른 글

[Algorithm/JAVA] Comparator, Comparable  (0) 2021.01.31
[Algorithm] 그래프(Graph)  (0) 2020.11.15
[Algorithm/Java] LinkedList 자료구조  (0) 2020.11.14
[Algorithm] BFS, 너비 우선 탐색  (0) 2020.11.14
[Algorithm] DFS, 깊이 우선 탐색  (0) 2020.11.02