Iterator,ListIterator,Enumeration

조용근·2024년 1월 26일

Iterator,ListIterator,Enumeration

컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스

Iterator 인터페이스 메서드(Enumeration의 신버전)


Enumeration 인터페이스 메서드

위 두 메서드는 이름만 다를뿐, 기능은 똑같다.

Listiterator 인터페이스 메서드

ListIteratorIterator의 접근성을 향상시킨 것이다.
(단방향 -> 양방향//다음 요소와 이전 요소를 모두 읽어올 수 있다.)

iterator는 Collection에 저장되어 있는 메서드이므로 List와 Set에서 모두 사용이 가능하다.

package javaplus.Collection;
import java.util.*;
class ListIterator {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator it = list.iterator();

        while(it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);

        }
        //iterator는 1회용이라 다쓰고 나면 다시 얻어와야 한다.
        it = list.iterator();

        while(it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
        }
        for(int i =0; i<list.size(); i++){
            Object obj = list.get(i);
            System.out.println(obj);
        }
    }

}

주의할 점은

ArrayList list = new ArrayList(); -> HashSet list = new HashSet();

으로 바꾸면

for(int i =0; i<list.size(); i++){
            Object obj = list.get(i);
            System.out.println(obj);

위 코드를 출력하지 못해서 오류가 난다. HashSet()은 Set의 메서드이다. 하지만, get()은 List에 해당하는 메서드이므로 사용할 수 없다.

이와 달리,

Iterator it = list.iterator();

        while(it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);

        }

위 코드는 Set은 Collection의 자손이기 때문에, 정상 출력된다.

추가적으로

Set은 Collection의 자손이기 때문에 HashSet list = new HashSet();을 Collection list = new HashSet();으로 변경이 가능하다.

iterator는 Collection의 메서드이므로 Map에서는 사용할 수 없다.
따라서, ketSet(), entrySet(), values()와 같은 메서드를 이용해서 호출해야 한다.

Set eSet = map.entrySet();
Iterator it = eSet.iterator();
profile
Today I Learn

0개의 댓글