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 |