코린이의 소소한 공부노트

Iterator, ListIterator, Enumeration 인터페이스 본문

Java

Iterator, ListIterator, Enumeration 인터페이스

무지맘 2022. 11. 3. 11:07

[이터레이터, 리스트이터레이터, 이뉴머레이션 인터페이스]

1. 컬렉션에 저장된 데이터를 접근(읽어오기)하는 데 사용되는 인터페이스다.

2. Enumeration Iterator의 구버전이고, ListIterator Iterator의 접근성을 향상시킨 것이다.(단방향 -> 양방향)

 

[Iterator 인터페이스의 메서드]

boolean hasNext()
// 읽어 올 요소가 남아있는지 확인한다.
// 있으면 true, 없으면 false를 반환한다.

Object next()
// 다음 요소를 읽어온다.
// hasNext()로 먼저 확인하는 것이 안전하다.

void remove()
// next()로 읽어 온 요소를 삭제한다.
// next()를 호출한 다음 remove()를 호출해야한다.(선택적 기능)

void forEachRemaining(Consumer<? super E> action)
// 컬렉션에 남아있는 요소들에 대해 지정된 작업(action)을 수행한다.
// 람다식을 사용하는 디폴트 메서드

 

[Enumeration 인터페이스의 메서드]

boolean hasMoreElements()
// 읽어 올 요소가 남아있는지 확인한다.
// 있으면 true, 없으면 false를 반환한다.
// = Iterator의 hasNext()

Object nextElement()
// 다음 요소를 읽어온다.
// hasMoreElements()로 먼저 확인하는 것이 안전하다.
// = Iterator의 next()

 

[Iterator 사용]

1. 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것이다.

  - 컬렉션마다 데이터를 저장한 구조가 다 다르기 때문에 표준화가 필요하다.

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

  - iterator()Collection 인터페이스에 있다.

3. iterator 1회용이기 때문에 끝까지 다 읽고 난 후 재사용할 수 없다.

  - 다시 iterator()를 호출해서 새 객체를 얻어야 한다.

List list = new ArrayList(); // 다른 컬렉션으로 변경할 때는 이 부분만 수정
// list = {1,2,3}

Iterator it = list.iterator();
while(it.hasNext()) // 읽어 올 요소가 있다면 true, 없다면 false
    System.out.println(it.next()); // 다음 요소를 읽어옴

it = list.iterator(); // 이 코드를 생략하면 새 iterator를 받지 않았기 때문에
while(it.hasNext()) // 조건문이 false가 돼서 실행되지 않음
    System.out.println(it.next());

4. 코드 변경이 예상될 때는 Iterator를 활용하는 것이 편하다.

List list = new ArrayList();
// list = {1,2,3}

Iterator it = list.iterator();
while(it.hasNext())
    System.out.println(it.next());
    
for(int i=0 ; i<list.size() ; i++)
    System.out.println(list.get(i)); // 위의 코드와 같은 동작을 함
    
---------------------------------------
// 같은 코드를 Collection의 다른 자손인 Set으로 바꿔서 실행시켜보면..
HashSet list = new HashSet();
// list = {1,2,3}

Iterator it = list.iterator();
while(it.hasNext()) // 실행 O
    System.out.println(it.next());
    
for(int i=0 ; i<list.size() ; i++) // 실행 X
    System.out.println(list.get(i)); // Set에는 get()이 없음

 

[Map에는 iterator()가 없다.]

- 요소를 읽어오려면 keySet(), entrySet(), values()를 호출해야 한다.

- 각각의 반환타입이 Set, Set, Collection이므로 여기에 iterator()를 호출해야 한다.

Map m = new HashMap();
// ...
Iterator it = m.entrySet().iterator();

'Java' 카테고리의 다른 글

Comparator, Comparable 인터페이스  (0) 2022.11.05
Arrays 클래스  (0) 2022.11.04
스택 클래스와 큐 인터페이스  (0) 2022.11.02
LinkedList 클래스  (0) 2022.11.02
ArrayList 클래스  (0) 2022.10.27