[자바의 정석]chapter11 컬렉션 프레임웍 1.5 Iterator, ListIterator, Enumeration

임대진·2022년 3월 11일
0

1.5 Iterator, ListIterator, Enumeration

  • Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.

Iterator

  • 컬렉션 프레임웍에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다.
메서드설명
boolean hasNext()읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다.
Object next()요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.
void remove()next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다. (선택적 기능)
Collection c = new ArrayList(); // 다른 컬렉션으로 변경시 이부분만 고치면 된다.
Iterator it = c.iterator();
while(it.hasNext()){
      System.out.println(it.next());
}
  • ArrayList 대신 Collection인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하기만 하면 된다.

  • Iterator를 이용해서 컬렉션의 요소를 읽어오는 방법을 표준화했기 때문에 이처럼 코드의 재사용성을 높이는 것이 가능한 것이다.

  • Map인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍(pair)으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없다.

  • 그 대신 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 가각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.

Map map - new HashMap();
...
Iterator it = map.entrySet().iterator();
import java.util.*;

class IteratorEx1 {
  public static void main(String[] args){
      ArrayList list = new ArrayList();
      list.add("1");
      list.add("2");
      list.add("3");
      list.add("4");
      list.add("5");

      Iterator it = list.iterator();
     
      while(it.hasNext()){
          Object obj = it.next();
          System.out.println(obj);
     }
}  //main

}

ListIterator와 Enumeration

Enumeration Iterator의 구버전
ListIterator Iterator에 양방향 조회기능추가(List를 구현한 경우만 사용가능)

Enumeration인터페이스의 메서드

메서드설명
boolean hasMoreElements()읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다. Iterator의 hasNext()와 같다.
Object nextElement()요소를 읽어 온다. nextElement()를 호출하기 전에 has =MoreElements()를 호출해서 읽어올 요소가 남아있는지 확인하는 것이 안전하다.
Iterator의 next()와 같다.

ListIterator의 메서드

메서드설명
void add(Object o)컬렉션에 새로운 객체(o)를 추가한다.(선택적 기능)
boolean hasNext()읽어 올 다음 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환
boolean hasPrevious()읽어 올 이전 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환
Object next()다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.
Object previous()이전 요소를 읽어 온다. previous()를 호출하기 전에 hasPrevious()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.
int nextIndex()다음 요소의 index를 반환한다.
void remove()next() 또는 previous()로 읽어 온 요소를 삭제한다.
반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다.(선택적 기능)
void set(Object o)next() 또는 previous()로 읽어 온 요소를 지정된 객체(o)로 변경한다.
반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다.(선택적 기능)
profile
신입개발자 공부기록 블로그

0개의 댓글