본문 바로가기

프로그래밍/Java

Iterator와 Enumeration, ListIterator에 대해

Enumeration, Iterator, ListIterator

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

- Enumeration은 컬렉션이 도입되기 전에 존재하던 Iterator 구버전이다.


Iterator의 메소드

- boolean hasNext()

일거 올 요소가 남아있는지 확인해 있으면 true, 없으면 false를 반환한다.

- Object next()

다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해 읽어 올 데이터가 있는지 먼저 확인하는 것이 오류가 발생하지 않는 안전한 방법이다.

- void remove()

next()로 읽어 온 요소를 삭제한다. next()를 호출한 후 remove()를 호출해야 한다. 그렇지 않으면 예외가 발생하게 된다. 이 메소드는 필수적인 기능이 아니기 때문에 Iterator를 구현할 때 생략해도 무방하다.

- void forEachRemaining(Consumer<? super E> action)

컬렉션에 남아있는 요소들에 대해 지정된 작업(action)을 수행하게 한다. 람다식을 사용하는 디폴트 메소드이다.

JDK1.8부터 추가된 메소드이다.

- hasNext와 next메소드가 Iterator 인터페이스의 핵심이다.

- 과거에는 인터페이스의 메소드들을 대충이라도 구현을 해야 했으나, JDK 1.8부터는 모든 메소드들이 Default메소드로 바뀌어 굳이 구현을 하지 않아도 실행에 무리가 없게 되었다.


Enumeration의 메소드

- boolean hasMoreElements()

읽어 올 요소가 있는지 확인하여 있으면 true, 없으면 false를 반환한다. Iterator의 hasNext에소드와 같은 역할을 수행한다.

- Object nextElement()

다음 요소를 읽어 온다. 읽어오기 전에 hasMoreElements()를 먼저 호출하여 다음 요소가 있는지 확인하는 것이 안전하다. Iterator의 next 메소드와 기능이 같다.


Iterator

- 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 인터페이스이다. 이는 상당히 의미 있는 점인데, 컬렉션의 종류와 관련없이 동일한 방식으로 컬렉션의 요소에 접근이 가능해졌다는 것을 의미한다.

- 컬렉션의 요소에 접근하려면 iterator()를 호출하여 Iterator를 구현한 객체를 참조한 후에 사용을 시작하게 된다.

- Iterator을 이용하여 컬렉션을 읽어온 후에는 출력 도중 데이터가 변경되면 오류가 발생한다. 이를 해결하기 위해서는 Iterator의 출력을 완벽하게 완료한 후에 데이터를 변경하거나, 변경 후 다시 Iterator을 사용하는 방법을 써야 한다.


ListIterator

- 기존 Iterator의 단방향성을 양방향성으로 업그레이드해 접근성을 향상시킨 인터페이스이다. next외에도 previous() 메소드를 지원하여 앞쪽 요소도 다시 불러올 수 있다.

- List 인터페이스를 구현한 컬렉션에만 사용이 가능하다는 한계가 있다. 반면 Iterator는 List뿐 아니라 Set인터페이스를 구현한 컬렉션에도 사용이 가능하다.


ListIterator의 메소드

- boolean hasNext()

읽어 올 다음 요소가 있는지 확인하여 있으면 true, 없으면 false를 반환한다.

- boolean hasPrevious()

읽어 올 이전 요소가 있는지 확인하여 있으면 true, 없으면 false를 반환한다.

- Object next()

다음 요소를 읽어온다.

- Object previous()

이전 요소를 읽어온다.

- int nextIndex()

다음 요소의 인덱스를 반환한다.

- int previousIndex()

이전 요소의 인덱스를 반환한다.

- void add(Object o)

컬렉션에 새로운 객체를 추가한다

- void remove()

next나 previous로 읽어 온 요소를 삭제한다. 이들 메소드가 앞에 없으면 오류가 발생한다.

- void set(Object o)

next나 previous로 읽어 온 요소를 지정된 객체로 변경한다.

'프로그래밍 > Java' 카테고리의 다른 글

HashMap과 TreeMap에 대해  (0) 2019.04.25
Arrays, Comparable, Comparator에 대해  (0) 2019.04.25
Stack과 Queue에 대해  (0) 2019.04.22
Collection framework에 대해 (3)  (0) 2019.04.21
Collection framework에 대해(2)  (0) 2019.04.20