ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ch11 컬렉션 프레임웍] Iterator & Enumeration 와 Map
    프로그래밍 언어/JAVA 2022. 8. 3. 12:57

     

    Iterator, ListIterator, Enumeration

     

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

     

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

     

    컬렉션 프레임웍에서는 컬렉션에 저장된 요소를 읽어오는 방법을 표준화하였다. 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator 인터페이스를 정의하고, Collection인터페이스에서는 'Iterator를 구현한 클래스의 인스턴스'를 반환하는 iterator()를 정의하고 있다. 

     

    메서드 설 명
    boolean hasNext() 읽어올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다.
    Object next() 다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어올 요소가 있는지 확인해야 한다.

     

    iterator()는 Collection인터페이스에 정의된 메소드이므로 Collection인터페이스의 자손인 List와 Set에도 포함되어 있다. 그래서 List나 Set 인터페이스를 구현하는 컬렉션은 iterator()가 특징에 맞게 작성되어 있다. 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해 클래스의 요소들을 읽어올 수 있다.

     

    List list = new ArrayList(); //다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다.
    Iterator it = list.iterator();

    while(it.hasNext()) { //boolean hasNext() 읽어올 요소가 있는지 확인
       System.out.println(it.next()); //Object next() 다음 요소를 읽어온다
    }

     

    Iterator를 이용해 컬렉션의 요소를 읽어오는 방법을 표준화했기 때문에 ArrayList 대신 List 인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 이와 같은 코드를 사용할 수 있다. 즉) 재사용성을 높이는 것이 가능하다.

     

     

     

    <예제 1번>

    package ch11;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class Ex11_5 {
    
    	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);
    		
    		
    		Iterator it = list.iterator();
    		while(it.hasNext()) {
    			Object obj = it.next();
    			System.out.println(obj);
    			
    		}
    		
    
    	}
    
    }

    예제 1번 출력 값

     

    List 클래스들은 저장순서를 유지하기 때문에 Iterator를 이용해서 읽어 온 결과 역시 저장순서와 동일하지만 Set 클래스들은 각 요소간의 순서 유지 되지 않기 때문에 Iterator를 이용해 저장된 요소들을 읽어와도 처음에 저장된 순서와 같지 않다. 

     

     

     

    Map과 Iterator

     

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

     

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

     

    Iterator it = map.entrySet().iterator(); 위의 이 문장은 아래 2 문장을 한 줄로 합친 것이라고 이해하면 된다. 

     

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

    댓글

Designed by Tistory.