[Java] Iterator

eeminsu·2021년 11월 17일
1
post-thumbnail

자바의 정석을 통해 공부한 내용을 요약하였습니다.

Iterator

public interface Iterator {
    boolean hasNext();
    Object next();
    void remove();
}

public interface Collection{
    public Iterator iterator();
}

1. 특징

  • 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.
  • 컬렉션에 저장된 요소를 일겅오는 방법을 표준화하였다.
  • Collection 인터페이스에는 Iterator를 반환하는 iterator() 메서드를 정의하고 있다.
  • List와 Set은 Collection 인터페이스의 자손이므로 iterator()메서드가 각 컬렉션의 특징에 맞게 작성되어 있다.


2. 메서드

  • boolean hasNext() - 읽어 올 요소가 남아있는지 확인
  • Object next() - 다음 요소를 읽어옴



3. 사용법

Collection c = new ArrayList();
Iterator it = c.iterator();

while(it.hasNext()){
   System.out.println(it.next());
}
  • Collection인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 ArrayList대신 동일한 코드를 사용할 수 있다.
  • Iterator를 이용해서 컬렉션의 요소를 읽어오는 방법을 표준화했기 때문에 코드의 재사용성을 높이는 것이 가능하다.
  • 자손 클래스의 멤버를 사용하는 것이 아니라면 부모 클래스 타입으로 참조변수를 선언하는 것이 좋다.
  • 자손 클래스의 멤버를 사용하지 않았음에도 자손 클래스 타입으로 참조변수를 선언하게 된다면 선언문 이후의 문장들을 검토해야 한다.
  • 부모 클래스에 정의되지 않은 메서드를 호출했을 수 있기 때문이다.


4. 비고

Map map = new HashMap();

Iterator it = map.entrySet().iterator();
  • Map인터페이스는 iterator()를 직접 호출할 수 없는 대신에 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어온 후 iterator()를 호출해야 한다.
  • List클래스와 달리 Set클래스는 각 요소간의 순서가 유지 되지 않기 때문에 Iterator를 이용해서 읽어 와도 처음에 저장된 순서와 같지 않다.
profile
안되면 될 때까지

0개의 댓글