[Java] Iterator의 개념과 사용 방법

김동욱·2023년 3월 21일
0

Java

목록 보기
2/8

Iterator이란?

개발자가 컬렉션에 저장된 요소들에 접근할 때 사용하는 인터페이스입니다. 여기서 컬렉션이란 자바에서 제공되는 자료구조들의 인터페이스로 ArrayList,set,Queue 등등이 이를 상속받고 있습니다.

즉, 각 자료구조마다 자료를 저장된 방식이 다른데 이를 표준화해서 한 가지 방법으로 읽어올 수 있도록 한 것입니다.
표준화 한 방식으로 출력하기 때문에 사용이 간편하며, 코드 작성 후 컬렉션 타입을 변경해도 추가 수정이 필요하지 않기 때문에 편리합니다.

메소드

메소드설명
Boolean hasNext();읽어 올 요소가 남아있는지 확인합니다. True / false
Object next()다음 요소를 읽어오며, hasNext()로 확인 후 사용하는 것이 안전합니다.
void remove();next()로 읽어 온 요소를 현재 컬렉션에서 삭제합니다. next()를 먼저 사용해야 합니다.

하지만 값을 변경하고 추가하지 못하며, 대량의 데이터를 처리할 때 속도가 느리다는 단점이 있습니다.

[Tip] ArrayList에서 특정 요소를 삭제하려고 할 때 리스트의 remove()메소드를 사용하면 정상적으로 작동하지 않습니다. 왜냐하면 리스트가 삭제되면서 index의 길이도 같이 줄어들기 때문입니다. remove()메소드는 읽어 온 요소를 현재 컬렉션에서 삭제하기 때문에 ArrayList에 저장된 요소를 삭제할 때 편리하게 사용할 수 있습니다.

코드를 살펴보면

List list = new ArrayList();
Iterator it = list.iterator();

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

이렇게 하면 list에 있는 요소들을 list메소드 없이 읽을 수 있습니다.
단, 주의할 점은 호출된 iterator객체는 일회용이므로 반복해서 iterator를 사용해야 할 경우 계속해서 객체를 생성해줘야 합니다.

map과 iterator

map은 collection의 자손이 아니기 때문에 iterator를 사용하지 못 합니다.

Map map = new Map();
iterator it = map.iterator(); //불가능

그렇기 때문에 keySet(), entrySet(), values() 메소드를 우선 호출하고 사용해줘야 하는데 위 3가지 메소드는 map의 전체 값을 출력할 때 사용하는 메소드입니다.
key값만 필요한 경우는 KeySet()
value값만 필요한 경우는 values()
두 값 모두 필요한 경우는 entrySet() 을 사용합니다.

Map map = new Map();
Iterator it = map.values().iterator();
profile
안녕하세요. 공부해요

0개의 댓글