본문 바로가기

자바의 정석 정리

자바의 정석 - 11.5 Iterator, ListIterator, Enumeration

11.5.1 Iterator

  • 컬렉션 프레임웍에서 컬렉션에 저장된 요소를 읽어오는 방법표준화 했음
  • 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, Collection인터페이스에는 Iterator를 반환하는 iterator()를 정의함
  • public interface Iterator{ boolean hasNext(); Object next(); void remove(); } public interface Collection{ ... public Iterator iterator(); ... }
  • 주로 while문을 사용해 컬렉션 클래스를 읽음
  • Collection c = new ArrayList(); Iterator it = c.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
  • Map인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍으로 저장하고 있기 때문에 iterator()를 직적 호출할 수 없음
  • keySet()이나 entrySet()과 같은 메서드를 통해서만 키와 값을 각가 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator을 얻을 수 있음
  • Map map = new HashMap(); ... Iterator it = map.entrySet().iterator();

11.5.2 ListIterator와 Enumeration

  • Enumeration는 컬렉션 프레임웍이 만들어지기 이전에 사용하던 것으로 Iterator의 구버전임
  • ListIterator는 Iterator을 상속받아 기능을 추가한 것임
  • 💡 단방향인 Iterator와 달리 ListIterator는 양방향으로 이동이 가능함. 단, List 인터페이스를 구현한 컬렉션에만 사용할 수 있음