Programing Language/JAVA

Enumeration과 Iterator

칼쵸쵸 2021. 2. 25. 20:35

JAVA Collection 에 저장된 데이터에 접근하는 방법

 

Enumeration

Java 1.2 부터 소개된 초기 Collection을 지원

Snapshot 방식

- Enumeration을 사용시 데이터에 직접 접근하는것이 아닌 접근하려는 Collection을 복사하여 사용

- 다른 사용자가 Collection의 원본데이터를 수정 할 시에 해당 내용을 인지 할 수 없음

 

Vector 등 초기 객체만 지원

 

public class Main {
    public static void main(String args[])
    {
        Vector<Integer> v = new Vector();
        v.add(1);
        v.add(2);
        Enumeration e = v.elements();
        
        while(e.hasMoreElements())
        {
            System.out.println(e.nextElement());
        }
    }
}

 

Iterator

모든 Collection 객체에 사용 가능

직접 데이터에 접근하여 데이터를 읽어옴

원본 Collection 데이터를 삭제가능 ( 가장 안전한 Collection 객체 순회중 삭제 방식 )

다른 사용자가 Iterator를 실행 중인 객체에 접근시 Fail-fast, ConcurrentModyfication Exception을 발생 시킴

일반적인 상황에서 Iterator를 사용한다.

 

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class Main {
    public static void main(String args[])
    {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        Iterator<Integer> iter = arr.iterator();

        while(iter.hasNext())
        {
            if(iter.next().equals(1)) iter.remove(); // 데이터 삭제
        }

        Iterator<Integer> iter2 = arr.iterator();
        while(iter2.hasNext())
        {
            System.out.println(iter2.next());
        }
    }
}