Iterator, ListIterator, Enumeration

정순동·2023년 12월 19일
0

자바기초

목록 보기
60/89

Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다. Enumeration은 Iterator의 구버젼이며, ListIterator는 Iterator의 기능을 향상시킨 것이다.

Iterator - 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
ListIterator - Iterator에 양방향 조회기능추가(list를 구현한 겨우만 사용가능)
Enumeration - Iterator의 구버전

컬렉션 프레임워크는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 하였다. 컬렉션에 접근할 수 있는 Iterator인터페이스를 정의하고, Collection인터페이스에는 'Iterator를 구현한 클래스의 인스턴스'를 반환하는 iterator()메서드가 존재한다.

	public interface Iterator {
    	boolean hasNext();
        Object next();
        void remove();
    }

	public interface Collection {
    	...
        public Iterator iterator();
        ...
	}        

iterator()는 List와 Set에도 있으며 List나 Set인터페이스를 구현하는 컬렉션 클래스들은 iterator()가 각 컬렉션의 특징에 알맞게 작성돼 있다. 컬렉션 클래스에 대해 iterator()를 사용해 Iterator객체를 얻은 다음 반복문을 사용하여 컬렉션 클래스의 요소들을 읽어올 수 있다.

	List list = new ArrayList();
    iterator it = list.iterator();
    
    while(it.hasNext()) {	// boolean hasNext() 요소가 남아있는지 확인
    	System.out.println(it.next());	// Object next() 다음 요소를 가져 옴.
    }

Iterator 예제

import java.util.*;

public class IteratorExample {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator it = list.iterator();

        while (it.hasNext()) {
            Object o = it.next();
            System.out.println(o);
        }
    }
}

List클래스들은 저장순서를 유지하기에 Iterator를 이용해 읽어 온 결과 역시 저장순서와 동일하지만 Set클래스들은 처음에 저장된 순서와 같지 않음을 유의하자. List클래스들은 Iterator대신 아래의 코드와 같이 for문과 get()만으로도 모든 요소들을 출력 가능하다.

	for(int i = 0; i < list.size(); i++) {
    	Object obj = list.get(i);
        System.out.println(obj);
    }

Map에서의 Iterator

Map인터페이스를 구현한 클래스는 키와 값을 쌍으로 저장하기에 iterator()를 직접 호출할 수 없고, 그 대신 keySet()이나 entrySet()과 같은 메서드를 통해 키와 값을 각각 따로Set의 형태로 얻어 온 후 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.

	Map map = new HashMap();
    	...
	Iterator it = map.entrySet().iterator();        

Iterator it = map.entrySet().iterator(); 는 아래의 두 문장을 하나로 합친 것이라고 이해하면 된다.

	Set eSet = map.entrySet();
    Iterator it = eSet.iterator();

0개의 댓글