24. 제네릭 컬렉션 활용 - Iterator


javalogo

Overview

제네릭 컬렉션의 Iterator<E>에 대해서 알아본다.


컬렉션의 순차 검색을 위한 Iterator

Vector, ArrayList, LinkedList, Set과 같은 리스트 모양의 컬렉션에서 요소를 순차적으로 검색할 때는 java.util 패키지의 Iterator<E> 인터페이스를 사용하면 편리하다.

Iterator<E>에서 <E>에는 검색 대상 컬렉션의 매개 변수 타입과 동일하게 설정하면 된다.

메소드는 다음 표와 같이 간단하지만 매우 강력하다.

메소드설명
boolean hasNext()다음 반복에서 사용될 요소가 있으면 true 리턴
E Next()다음 요소 리턴
void remove()마지막으로 리턴된 요소 제거

예를 들어 다음과 같은 벡터가 있다고 하자.

Vector<Integer> v = new Vector<Integer>();  // Integer 타입을 요소로 하는 벡터

Vector<E>는 상속을 통해 Iterator 인터페이스를 구현하고 있으므로, 다음과 같이 iterator() 메소드를 호출하여 Iterator 객체를 얻어낸다.

Iterator 객체를 반복자라고 부르기도 한다.

Iterator<Integer> it = v.iterator();    // 벡터 v의 요소를 순차 검색할 Iterator 객체 리턴

벡터 v의 요소 타입(Integer)에 맞추어 Iterator<E>의 <E>에 Integer를 지정하였다.

이제, it 객체를 이용하면 인덱스 없이 벡터의 각 요소를 순차적으로 검색할 수 있다.

다음은 it로 컬렉션의 각 요소들을 방문하는 코드이다.

while (it.hasNext()) {  // it로 모든 요소를 방문할 때까지
    int n = it.next();  // 다음 요소 리턴. it의 요소 타입은 Integer
    ...
}

Iterator를 이용하여 Vector 속의 모든 요소를 출력하고 합 구하기

Vector<Integer>로부터 Iterator를 얻어내고 이를 이용하여 벡터의 모든 정수를 출력하고 합을 구한다.

public class IteratorEx {
    public static void main(String[] args) {
        // 정수 값만 다루는 제네릭 벡터 생성
        Vector<Integer> v = new Vector<Integer>();
        v.add(5);
        v.add(4);
        v.add(-1);
        v.add(2, 100);

        // Iterator를 이용한 모든 정수 출력하기
        Iterator<Integer> it = v.iterator();    // Iterator 객체 얻기
        while(it.hasNext()) {
            int n = it.next();
            System.out.println(n);
        }

        // Iterator를 이용하여 모든 정수 더하기
        int sum = 0;
        it = v.iterator();  // Iterator 객체 얻기
        while(it.hasNext()) {
            int n = it.next();
            sum += n;
        }
        System.out.println("벡터에 있는 정수 합 : " + sum);
    }
}

실행 결과

5
4
100
-1
벡터에 있는 정수 합 : 108





© 2019. by RaP0d

Powered by aiden