컬렉션에 저장된 데이터를 접근 방법을 표준화한 인터페이스이다. 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();
}
}