본문 바로가기
Language/Java

Iterator, ListIterator, Enumeration

by 서초록 2022. 1. 11.

- 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스이다.

- Enumeration은 Iterator의 구버전이다. 

- ListIterator는 Iterator의 접근성을 향상시켜서 next()와 previous()가 있어 다음 요소와 이전 요소를 읽어 올 수 있다. 

   List인터페이스를 구현한 컬렉션에서만 사용가능하다. 

메서드 설명
boolean hasNext() 읽어 올 요소가 남아있는지 확인. 있으면 true, 없으면 false를 반환
Object next() 다음 요소를 읽어옴. next()를 호출하기 전에 hasNext()를 호출해서 읽어올 요소가 있는지 확인하는 것이 안전함
void remove() next()로 읽어 온 요소를 삭제. next()를 호출한 다음에 remove()를 호출해야함 
void forEachRemaining(Consumer<? super E> action) 컬렉션에 남아있는 요소들에 대해 지정된 작업을 수행함. 람다식을 사용하는 디폴트 메서드(JDK1.8부터 추가)

컬렉션은 종류마다 읽어오는 방법이 다른데 Iterator는 저장된 요소들을 읽어오는 방법을 표준화한 것이다. 

예를 들어 List에서 Set으로 변경할 경우 저장된 요소를 읽어오는 코드가 바껴야하는 것이지만 Iterator를 이용하면 사용하기 편하다. 

컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용한다. 

 

List list = new ArrayList();
Iterator it = list.iterator(); //Iterator객체를 반환

while(it.hasNext()) { //읽어올 요소가 있는지 확인 
	System.out.println(it.next()); //요소를 읽어오기
}

Iterator는 1회용이라 한 번 끝까지 읽으면 Iterator를 다시 얻어와야한다(새로운 iterator객체를 얻는다). \

 

 

예제

 

Map에는 iterator()가 없다. 따라서 keySet(), entrySet(), values()를 호출해야한다. 

Map map = new HashMap();
(생략)
Iterator it = map.entrySet().iterator();

위 한 문장을 아래 두 문장으로 바꿔쓸 수 있다. 

Set eSet = map.entrySet();
Iterator it = eSet.iterator();

 

 

[출처] 자바의 정석 남궁성 저

'Language > Java' 카테고리의 다른 글

Collections  (0) 2022.01.14
Arrays  (0) 2022.01.11
LinkedList  (0) 2021.12.18
객체지향프로그래밍2  (0) 2021.10.26
객체지향프로그래밍1-2  (0) 2021.10.26