[자바] Iterator, ListIterator, Enumeration

June·2021년 1월 4일
0

자바

목록 보기
25/36

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

Iterator

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

List list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) {
    System.out.println(it.next());
}

참조변수의 타입을 ArrayList타입이 아니라 List타입으로 한 이유:
List에 없고 ArrayList에만 있는 메서드를 사용하는게 아니라면, List타입의 참조변수로 선언하는 것이 좋다. 만일 List인터페이스를 구현한 다른 클래스, 예를 들면 LinkedList로 바꿔야 한다면 선언문 하나만 변경하면 나머지 코드는 검토하지 않아도 된다. 참조변수의 타입이 List이므로 List에 정의되지 않은 메서드는 사용되지 않았을 것이 확실하기 때문이다.

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

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

Iterator의 remove()는 단독으로 쓰일 수 없고, next()와 같이 써야한다. 특정위치의 요소를 삭제하는 것이 아니라 읽어 온 것을 삭제한다.

0개의 댓글