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() 사용

'ETC > 1. Today I Learned' 카테고리의 다른 글
| 개발 주요 개념 정리 - 클래스, 인터페이스, JSON, (0) | 2025.12.24 |
|---|---|
| [Java] Collections에 관하여 (0) | 2025.12.23 |
| [Java] 제네릭 공부하기 - 1장 (0) | 2025.12.19 |
| [Git] 내 코드를 다른 레포지토리의 코드로 덮어씌우기 (0) | 2025.12.16 |
| [Java] 클래스 간 통제 관계 (0) | 2025.12.15 |