ABOUT ME

Today
Yesterday
Total
  • 자바 Iterator란?
    Java/자바의정석 2023. 2. 27. 23:28
    반응형

    Iterator란?

    모든 컬렉션 프레임워크(List, Set, Map, Queue 등)에 값을 읽어(Read)가져오거나 삭제(remove)하는 기능

     

    Iterator의 장점

    모든 컬렉션 프레임워크(List, Set, Map, Queue 등)에서 공통으로 사용이 가능하다.
    값을 보다 쉽게 가져오고, 삭제가 가능하다.

     

    Iterator의 단점

    단방향으로만 반복이 가능하다.
    값을 변경 및 추가가 불가능하다.
    대량의 데이터를 제어하는 경우에는 속도가 느리다.

     

    Iterator의 메서드

    메서드 기능
    Iterator.hasNext() Iterator내부의 다음값이 존재하는지 여부
    Iterator.next() Iterator의 다음값을 가져오는 기능
    Iterator.remove() Iterator에서 현재 요소를 제거합니다.
    next() 메서드가 호출되지 않았는데 remove() 메서드를 호출한다면 IllegalStateException이 발생.

     

    Map에는 Iterator가 존재하지 않는다.

    Iterator는 List와 Set의 조상인 Collection내에 존재하고있다. 

     

    Map의 경우 값을 불러오는 경우 keySet(), entrySet() => set을 이용하여 불러온다.

    또한 값을 불러오는 경우는 values() => collection을 사용하여 불러온다.

    Map map = new HashMap();

     

    Map에서는 Iterator 인터페이스를 사용할 수 없기 때문에 Map에 entrySet(), keySet() 메소드를 사용하여 Set 객체를 반환받은 후 Iterator 인터페이스를 사용해야한다.

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

     

    다음 간단한 예제를 살펴보자.

     

    package JavaChap11;
    
    import java.util.*;
    
    class iteratorTest {
        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는  Set이나 List나 동일하게 되어있음, 변경을 최소화
            Iterator it = list.iterator();
    
            while(it.hasNext()) {
                Object obj = it.next();
                System.out.println(obj);
            }
    
    
        }
    }

    ==============실행결과==============

    0
    1
    2
    3
    4
    5


    ArrayList list = new ArrayList();
    list.add("0");
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    list.add("5");

    우선 list객체를 생성한 뒤 add()를 통하여 차례대로 값을 집어넣는다.

     

    만약 Set도 사용해야하는 경우라면

    Collection list = new ArrayList();
    Collection list = new HashSet();

    이와같이 참조값을 Collection(부모)로 설정해두면 뒤쪽 생성자만 변경해주면 편리하다.

     

    Iterator it = list.iterator();

    iterator의 경우 set이나 list에 동일하게 작동하므로 변경을 최소한으로 해주기 때문에 용이하다

     

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

    while문을 통해서 list에 있는 내용을 next()로 불러온다.

     

    여기서 주의할점은 iterator는 단방향이기때문에 while문을 통해 모든 내부값을 읽어온 뒤 다시 반복을 한다면

    값을 읽어오지 못한다. 그말은 즉 iterator는 1회용이다.

     

    Iterator it = list.iterator();
    while(it.hasNext()) {
        Object obj = it.next();
        System.out.println(obj);
    }

    값을 읽어오기 위해서는 객체를 다시 생성해야한다 .이점 유의하자.

    반응형

    'Java > 자바의정석' 카테고리의 다른 글

    댓글

Designed by Tistory.