컬렉션에 저장된 데이터를 접근 방법을 표준화한 인터페이스이다. List
, Set
, Map
각 컬렉션의 구조가 다르지만 Iterator
를 사용하면 hasNext()
와 next()
로 컬렉션의 데이터를 읽어올 수 있다. iterator
를 컬렉션에 호출해서 Iterator
를 구현한 객체를 얻어서 사용한다. Iterator
는 일회용으로 사용하고 나면 다시 생성해야 한다.
List list = new ArrayList(); // 다른 컬렉션도 가능ㅍ
Iterator it = list.iterator(); // Iterator 객체를 반환
while(it.hasNext()) { // 데이터의 유무를 boolean 값으로 반환
System.out.println(it.next()); // 있으면 데이터를 불러온다
}
Map
에는 iterator()
가 없다. 컬렉션은 List
와 Set
의 공통점을 뽑아 만든 부모 인터페이스이고 Map
은 컬렉션의 자손이 아니다. 때문에 keySet()
, entrySet()
, values()
를 호출해서 사용해야 한다.
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator it = list.iterator(); // List와 Set 인터페이스에서 사용 가능
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
ListIterator
는 Iterator
가 단방향인 단점을 보완해 hasPrevious()
를 추가하여 양방향으로 데이터를 찾을 수 있는 인터페이스다. 하지만 List
를 구현한 경우에만 사용할 수 있다.
import java.util.*;
class ListIteratorEx1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
ListIterator it = list.listIterator();
while(it.hasNext()) {
System.out.print(it.next()); // 순방향으로 진행하면서 읽어온다
}
System.out.println();
while(it.hasPrevious()) {
System.out.print(it.previous()); // 역방향으로 진행하면서 읽어온다
}
System.out.println();
}
}