본문 바로가기

프로그래밍/JAVA

[ JAVA ] Iterator, ListIterator, Enumeration

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()를 먼저 호출한 다음에 이 메서드를 호출해야한다. (선택적 기능)

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

[ JAVA ] 지네릭스(Generics) - ①  (0) 2023.02.06
[ JAVA ] Arrays  (0) 2023.01.08
[ JAVA ] Queue(큐)  (0) 2023.01.08
[ JAVA ] Stack(스택)  (0) 2023.01.07
[ JAVA ] 형식화 클래스  (0) 2022.12.20