iterator

iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 iterator입니다. 쉽게 말하면 컬렉션으로부터 정보를 얻어내는 인터페이스입니다. 또한, iterator는 인터페이스이며 그 구성은 아래와 같습니다.

1
2
3
4
5
public interface Iterator(
boolean hasNext();
Object next();
void remove();
)
  • boolean hasNext() : 읽어 올 요소가 남아있는지 확인하는 메소드로 읽어 올 요소가 남아 있으면 true, 없으면 false를 반환합니다.
  • Object next() : 읽어 올 요소가 있으면 다음 요소를 가져옵니다.
  • void remove() : next()로 읽어 온 요소를 삭제합니다. 그러므로 next()를 호출한 다음에 remove()를 호출해야 합니다.

그렇다면 우리가 사용하는 컬렉션 프레임워크에서는 어떻게 사용하면 될까요??

이 질문에 대한 답은 간단합니다. 예를 들어, List, set과 같은 인터페이스를 구현하는 컬렉션은 iterator()가 컬렉션의 특징에 맞게 설계가 되어 있기 때문에 쉽게 사용할 수 있습니다.

Iterator와 list.size() 사용법

  • Iterator 사용법
1
2
3
4
5
6
ArrayList<Integer> list = new ArrayList<Integer>();

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
iterator.next();
}
  • list.size 사용법
1
2
3
4
5
ArrayList<Integer> list = new ArrayList<Integer>();

for(int i=0;i<list.size();i++){
list.get(i);
}

결론

iteraotr는 자동으로 index를 관리해주기 때문에 사용함에 있어서 편리함을 가져다 주지만, Iterator는 객체를 만들어서 사용하기 때문에 list의 size를 가져와서 계산하는 것보다 속도가 느립니다. 그러므로, list의 size를 받아와서 사용하는 것이 더 좋습니다. (속도면에서 빠릅니다.)