ETC/1. Today I Learned

Iterator 활용하기 - Iterable이 아닌 경우

montmer27 2025. 12. 23. 18:59

Iterator를 아래와 같이 사용하는 것을 보고, HashMap에도 적용할 수 있을 것이라 생각하여 다음과 같이 구현하였다.

 

1. iterator 사용 예제

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

public class Main {
  public static void main(String[] args) {
    // Create an ArrayList of Strings
    ArrayList<String> cars = new ArrayList<String>();
    cars.add("Volvo");
    cars.add("BMW");
    cars.add("Ford");
    cars.add("Mazda");

    // Get an iterator for the ArrayList
    Iterator<String> it = cars.iterator();

    // Iterate through the list using the iterator
    while(it.hasNext()) {
      System.out.println(it.next());
    }
  }
}

//출력 결과
Volvo
BMW
Ford
Mazda

 

2.  나의 응용

import java.util.Iterator;
import java.util.HashMap;

public class Main {
  public static void main(String[] args) {
    // Create an ArrayList of Strings
    HashMap<String, Integer> fruits = new HashMap<>();
    fruits.put("Tomato", 1);
    fruits.put("Watermelon", 3);
    fruits.put("Pomelo",3);
    fruits.put("Kiwi",2);
    

    // Get an iterator for the ArrayList
    Iterator<String, Integer> fr = fruits.iterator();

    // Iterate through the list using the iterator
    while(fr.hasNext()){
    System.out.println(fr.next());
    }
  }
}

//예상 출력 결과
{Tomato = 1, Watermelon=3, Pomelo=3, Kiwi=2}

//실제 출력 결과
Main.java:16: error: wrong number of type arguments; required 1
    Iterator<String, Integer> fr = fruits.iterator();
            ^
Main.java:16: error: cannot find symbol
    Iterator<String, Integer> fr = fruits.iterator();
                                         ^
  symbol:   method iterator()
  location: variable fruits of type HashMap<String,Integer>
2 errors

 

에러의 원인

1. 에러 내용 분석

1) Iterator<>는 1개의 매개변수만 받는다

2) HashMap<String, Integer> 타입의 변수 fruits에서 iterator() 메서드를 찾을 수 없다.

 

2. 에러 원인 규명

1) Iterator<>는 1개의 매개변수만 받는데, 2개의 매개변수를 전달했다.

2) HashMap은 Iterable을 상속받지 않기에, iterator() 메서드를 사용할 수 없다.

 

오늘의 배움

- Iterable을 상속하는 인터페이스는 List, Queue, Set 세가지다. 따라서 이 세 인터페이스를 구현하는 구현체여야 iterator()를 사용할 수 있다.

 

- 그럼에도 불구하고 HashMap을 iterator로 순회하려면 다음 방법을 이용하면 된다.

1) 키, 값 모두 필요한 경우 -> entrySet() 사용

2) 키만 필요한 경우 -> keySet() 사용

3) 값만 필요한 경우 -> values() 사용