[Java] Iterator

G·2024년 7월 11일
0

Java

목록 보기
20/21
post-thumbnail

✍️ Iterator

✏️ Iterator 이란?

  • 컬렉션 프레임웍에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였습니다.
  • 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator 인터페이스를 정의하고, Collection 인터페이스에는 Iterator 를 반환하는 iterator() 를 정의하고 있습니다.
  • iterator()Collection 인터페이스에 정의된 메서드이므로 ListSet에 알맞게 작성되어 있습니다.
  • iterator() 를 호출하여 Iterator 를 얻은 다음 반복문(주로 while문)을 사용하여 컬렉션 클래스의 요소들을 읽어 올 수 있습니다.


✏️ 주요 메서드

🎨  1.boolean hasNext()

  • 다음 요소가 있는지 확인합니다.
  • 요소가 있으면 true, 없으면 false 를 반환합니다.

🎨  2. Object next()

  • 다음 요소를 반환합니다.
  • next() 를 호출하기 전에 hasNext() 를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전합니다.

🎨  3. void remove()

  • Iterator의 마지막 반환 요소를 삭제합니다.
  • next()를 호출한 이후에만 사용할 수 있습니다. (선택 사항)


✏️ 구현

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

class Main {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
}

 // 실행 결과
1
2
3
4
5

✏️ Map 에서의 활용

  • Map 인터페이스를 구현한 컬렉션 클래스는 키(key) 와 값(value)을 쌍(pair)으로 저장하기 때문에 iterator() 를 직접 호출할 수 없습니다.
  • 때문에 Map 에서는 keySet() 이나 entrySet() 과 같은 메서드를 통해서 키와 값을 따로 Set 형태로 얻은 후 다시 iterator() 를 호출해야 합니다.
  • Set 클래스들은 각 요소간의 순서가 유지 되지 않기 때문에 Iterator 를 이용해서 요소를 읽어올 때 저장 순서와 같지 않습니다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Main {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("orange", 3);

        Iterator<String> keyIt = map.keySet().iterator();
        while (keyIt.hasNext()) {
            Object key = keyIt.next();
            System.out.println(key);
        }

		  // 실행결과
		  // banana
		  // orange
		  // apple

        Iterator<Map.Entry<String, Integer>> valueIt = map.entrySet().iterator();
        while (valueIt.hasNext()) {
             Map.Entry<String, Integer> entry = valueIt.next();
            System.out.println(entry);
        }

		  // 실행결과
		  // banana=2
		  // orange=3
		  // apple=1 
    }
}
profile
기!술! 블로그

0개의 댓글