[JAVA] Iterator 와 Enumeration

유동우·2023년 4월 3일
0

자바 기본

목록 보기
2/4
post-thumbnail

Enumeration

  • 순환 인터페이스, 스레드에 안전한 구조로 사용할 때 사용한다.
  • JAVA의 초창기에 만들어진 인터페이스 이고, Iterator의 하위버전이다.
  • 데이터를 삭제하는 기능이 없기때문에 지금은 거의 사용하지 않는 HashTable과 Vector에서 사용이 가능하다.

Enumeraion 인터페이스 메소드의 종류

1) hasMoreElements()

  • 뒤에 Element가 있는지 확인 하는데, 있으면 true, 없으면 false를 리턴한다.
  • Iterator의 hasNext()와 같다

2) nextElement()

  • 다음 Element를 읽어온다
  • iterator의 next()와 같다.

Enumeration 인터페이스 코드 예제


import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;

ArrayList<String> aList = new ArrayList<String>();

aList.add("Apple");
aList.add("Google");
aList.add("Facebook");
aList.add("Twitter");

for (int i=0; i < aList.size(); i++) {
  System.out.println("aList"+ i +"번째 요소 : " + aList.get(i));
}

// get Enumeration over ArrayList
Enumeration<String> e = Collections.enumeration(aList);;

while (e.hasMoreElements()) {
  System.out.println("e의 요소 : " + e.nextElement());
}

출력결과

Iterator

  • JAVA2 부터 도입된 인터페이스이고, 컬렉션 인터페이스를 구현한 모든 클래스에서 사용이 가능하다.
  • ShanShot을 제공하지 않아 모든 항목을 순차조회 하기 전에 변경사항(삽입/삭제/수정)이 일어나면 ConcurrentModificationException 예외가 발생한다 -> 작동 실패
  • 위와 같은 기능을 즉시멈춤(fail-fast) 라고 부른다

Enumeraion 인터페이스 메소드의 종류

1) hasNext()

  • 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true 없다면 false를 반환한다.

2) next()

  • 다음에 있는 요소를 반환한다.

Iterator 인터페이스 코드 예제


import java.util.ArrayList;
import java.util.Iterator;

public class Main
{
    public static void main(String[] args)
    {
        // 컬렉션 생성
        ArrayList<String> cars = new ArrayList<>();
        cars.add("벤츠");
        cars.add("람보르기니");
        cars.add("롤스로이스");
        cars.add("페라리");

        // iterator 획득
        Iterator<String> iterator = cars.iterator();

        // while문을 사용한 경우
        while(iterator.hasNext())
        {
            String str = iterator.next();
            System.out.println(str);
        }

        // for-each문을 사용한 경우
        for (String str : cars)
        {
            System.out.println(str);
        }
    }
}
profile
효율적이고 꾸준하게

0개의 댓글