1.5 Iterator, ListIterator, Enumeration
컬렉션에 저장된 요소를 접근(읽어오기)하는데 사용되는 인터페이스
Enumeration - Iterator의 구버전 / Listlterator - Iterator의 기능을 향상 시킨 것
Iteerator
컬렉션 프레임웍에서 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다.
컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, 컬렉션 인터페이스에는 ‘Iterator(Iterator를 구현한 클래스의 인스턴스)’를 반환하는 iterator()를 정의하고 있다.
public interface Iterator{
boolean hasNext();
Object next();
void remove();
}
public interface Collection{
...
public Iterator iterator();
...
}
iterator()는 Collection인터페이스에 정의된 메서드이므로 Collection인터페이스의 자손인 List와 Set에도 포함되어 있다. 그래서 List나 Set인터페이스를 구현하는 컬렉션은 iterator()가 각 컬렉션의 특징에 알맞게 작성되어 있다.
컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소들을 읽어 올 수 있다.
[Iterator인터페이스의 메서드]
메서드 | 설명 |
boolean hasNext() | 읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다. |
Object next() | 다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다. |
void remove() | next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다.(선택적 기능) |
ArrayList에 저장된 요소들을 출력하기 위한 코드
Collection c = new ArrayList(); //다른 컬렉션으로 변경시 이 부분만 고치면 된다.
Iterator it = c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
it = c.iterator(); //Iterator는 재사용이 안되므로, 다시 얻어와야 한다.
Map인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍(pari)으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없고, 그 대신 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.
Map map = new HashMap();
...
Iterator it = map.entrySet().iterator();
//아래의 두 문장을 합친 것
Set eSet = map.entrySet();
Iterator it = eSet.iterator();
ListIterator와 Enumeration
Enumeration : Iterator의 구버전
ListIterator : Iterator에 양방향 조회기능추가(List를 구현한 경우만 사용가능)
출처 : 남궁성. 「자바의 정석」. 도우출판. 2016
'프로그래밍언어 > Java' 카테고리의 다른 글
[자바의 정석] 11. 컬렉션 프레임웍 - HashSet / TreeSet (0) | 2023.08.06 |
---|---|
[자바의 정석] 11. 컬렉션 프레임웍 - Arrays / Comparator와 Comparable (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - Stack과 Queu (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - LinkedList (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - ArrayList (0) | 2023.08.06 |