본문 바로가기
Java | Spring/Java

[JAVA] 컬렉션 프레임워크 - 이터레이터

by 동기 2021. 6. 21.
반응형

Iterator

컬렉션에 저장된 데이터를 접근(읽어오기) 하는데 사용되는 인터페이스

예전엔 Enumeration을 썼지만 현재는 Iterator를 많이 쓴다

 

핵심 메서드

boolean  hasNext() : 읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false

Object  next() :  다음 요소를 읽어온다. next()를 호출하기전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.

 

ListIterator

Iterator의 접근성을 향상시킨 것이다 ( 양방향, 즉 Previous() 메서드로 이전 요소를 읽어올 수 있다. )

 

 

이터레이터, 왜 쓰는걸까?

컬렉션의 종류에는 List ( ArrayList, LinkedList ), Set ( TreeSet, HashSet), Map(HashMap) 이 있고, 각 구조가 다르다.따라서 요소들을 읽어오는 방법이 다 다른데, 표준화하여 읽어 올 수 있도록 한 것이 Iterator 이다

①확인하고( hasNext() )

②읽기( next() )만 하면 된다.( remove로 삭제도 가능하지만, 잘 쓰이지 않는다 )

 

예를 들어 List를 쓰다가 Set으로 바꿨을 때, 저장된 요소를 읽어오는 방법이 다르기때문에 해당 부분의 코드역시 바꿔야 한다.하지만 이터레이터를 이용하면  읽어오는 부분을 바꿀 필요가 없는 것이다.

 

사용

컬렉션에 Iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용한다. ( 1회용 이기때문에 다시 사용하려면 다시 구현해야한다.)

 

List list = new ArrayList(); //다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다. TreeSet으로 변경시에도 it.next를 계속 쓸 수 있다.

Iterator it = list.Iterator();



while(it.hasNext()){

    System.out.println(it.next());

}

 

 

 

※Map에는 Iterator가 없다.  keySet(), entySet(), values() 를 호출해서 Set이나 Value를 얻은 다음 Iterator를 이용하여 읽어 올 수 있다.

Map map = new HashMap();



// Set eSet = map.entrySet();

// Iterator it = eSet.Iterator(); 을 요약

Iterator it = map.entrySet().Iterator();



while(it.hasNext()){

    System.out.println(it.next());

}

 

 

반응형

'Java | Spring > Java' 카테고리의 다른 글

[JAVA] 열거형 enums  (0) 2021.11.01

댓글