Iterator

정태규·2022년 12월 16일
0

java

목록 보기
4/7

Iterator는 ArrayList,HashSet과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체다. Iterator는 반복의 기술 용어이기 때문에 반복자라고 한다.

사실 반복은 for나 while을 통해서도 충분히 가능하다. 하지만 왜 Iterator를 쓸까?

Iterator는 for나 while같은 반복문이 할 수 없는 일을 할 수 있다.
예를들어, iterator를 사용하는 동안에 요소를 제거할 수 있다.
리스트는 또한 양방향으로 반복할 수 있는 iterator를 제공한다. 반면에 for같은 반복문은 처음부터 끝까지 반복된다. 예를들어 LinkedList에서 i번째 요소에 접근할때 for문은 처음부터 i 번째까지 모든 요소르 반복해야 해서 성능이 나빠진다. 반면 iterator는 이러한 문제가 없다.

Iterator의 장점
1. 컬렉션에서 요소를 제어하는 기능
2. next() 및 previous()를 써서 앞뒤로 이동하는 기능
3. hasNext()를 써서 더 많은 요소가 있는지 확인하는 기능

[예제1] ArrayList에 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);
        }
    }

}
// >> 벤츠
// >> 람보르기니
// >> 롤스로이스
// >> 페라리

[예제2] Set을 사용할 경우 iterator 사용법

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

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

        // while문을 사용한 경우
        Iterator<String> iterator = cars.iterator();

        while(iterator.hasNext())
        {
            System.out.println("cars : " + iterator.next());
        }

        // for-each문을 사용한 경우
        for (String car : cars)
        {
            System.out.println("cars : " + car);
        }
    }

}
// >> cars : 람보르기니
// >> cars : 롤스로이스
// >> cars : 페라리
// >> cars : 벤츠

[예제] iterator 이용해 값 수정하기

import java.util.ArrayList;
import java.util.ListIterator;

public class Main
{
    public static void main(String[] args)
    {
        // 컬렉션 생성
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        list.add("F");
        System.out.println("while문 지나기 전 리스트에 들어있던 값 : " + list);

        // 리스트에 들어있는 값에 각각 '+' 붙이기
        ListIterator<String> listIterator = list.listIterator();
        while(listIterator.hasNext())
        {
            Object element = listIterator.next();
            listIterator.set(element + "+");
        }
        System.out.println("while문 지난 후 수정된 결과 : " + list);

        // 리스트에 들어있는 값을 역순으로 표시
        System.out.print("역순 출력 결과 : ");
        while(listIterator.hasPrevious())
        {
            Object element = listIterator.previous();
            System.out.print(element + " ");
        }
        System.out.println();
    }

}
// >> while문 지나기 전 리스트에 들어있던 값 : [A, B, C, D, E, F]
// >> while문 지난 후 수정된 결과 : [A+, B+, C+, D+, E+, F+]
// >> 역순 출력 결과 : F+ E+ D+ C+ B+ A+

출처: https://onlyfor-me-blog.tistory.com/319

0개의 댓글