프로그래밍/JAVA
[ JAVA ] Iterator, ListIterator, Enumeration
dev-je22
2023. 1. 8. 01:33
Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.
1. Iterator
▶ Collection 인터페이스에는 'Iterator(Iterator를 구현한 클래스의 인스턴스)'를 반환하는 iterator()를 정의하고 있다.
▶ 컬렉션 클래스에 대해 iteratort()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용하여 컬렉션 클래스의 요소들을 읽어 올 수 있다.
▶ Map 인터페이스를 구현한 컬렉션 클래스는 키(key)와 값(value)을 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없다.
( keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 iterator()를 호출한다.)
public interface Collection {
...
public Iterator iterator(); // Iterator를 구현한 클래스의 인스턴스를 반환
...
}
// ArrayList에 저장된 요소 출력 예시
List list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
⭐️ Iterator 인터페이스의 메서드
메서드 |
설 명 |
boolean hasNext() |
읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다. |
Object next() |
다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다. |
void remove() |
next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다. (선택적 기능) |
2. Enumeration
▶ Enumeration은 컬렉션 프레임워크가 만들어지기 이전에 사용하던 것으로 Iterator의 구버전이다.
▶ 가능하면 Enumeration 대신 Iterator를 사용
⭐️ Enumeration 인터페이스의 메서드
메서드 |
설 명 |
boolean hasMoreElements() |
읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다. Iterator의 hasNext()와 같다. |
Object nextElement() |
다음 요소를 읽어 온다. nextElement()를 호출하기 전에 hasMoreElements()를 호출해서 읽어올 요소가 남아있는지 확인하는 것이 안전하다. Iterator의 next()와 같다. |
3. ListIterator
▶ ListIterator은 Iterator를 상속받아서 기능을 추가한 것으로, ListIterator는 양방향으로의 이동이 가능하다.
▶ ListIterator은 List 인터페이스를 구현한 컬렉션(ArrayList, LinkedList 등..)에서만 사용할 수 있다.
⭐️ 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를 반환한다. |
int previousIndex() |
이전 요소의 index를 반환한다. |
void remove() |
next() 또는 previous()로 읽어 온 요소를 삭제한다. 반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다. (선택적 기능) |
void set(Object o) |
next() 또는 previous()로 읽어 온 요소를 지정된 객체(o)로 변경한다. 반드시 next()나 previous()를 먼저 호출한 다음에 이 메서드를 호출해야한다. (선택적 기능) |