1. entrySet() 이용
entrySet()
은 HashMap
의 모든 키-값 쌍을 Map.Entry
객체로 반환합니다.
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
특징
- 구조:
Map.Entry
객체를 통해 키와 값을 동시에 접근. - 장점:
- 키와 값 모두를 한 번에 접근할 수 있어 효율적.
- 코드가 간결하고 가독성이 높음.
- 단점:
entrySet()
은Set<Map.Entry>
를 반환하므로 추가적인 객체를 생성.
2. keySet() 이용
keySet()
은 HashMap
의 모든 키를 Set
으로 반환합니다.
for (String key : map.keySet()) {
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
특징
- 구조: 키를 순회하며 각 키를 이용해
get()
으로 값을 가져옴. - 장점:
- 키만 필요할 때 간단하게 사용 가능.
- 단점:
- 키를 순회하면서
get()
메서드를 호출하므로, 성능이 상대적으로 떨어질 수 있음(특히 큰HashMap
에서는 비효율적).
- 키를 순회하면서
3. values() 이용
values()
는 HashMap
의 모든 값을 Collection
으로 반환합니다.
for (Integer value : map.values()) {
System.out.println("Value: " + value);
}
특징
- 구조: 값만 순회하며 접근.
- 장점:
- 값만 필요할 때 간단히 사용 가능.
- 단점:
- 값에 대응하는 키를 얻을 수 없음.
4. Java 8+ forEach() 이용
Java 8부터는 HashMap
에 대해 forEach()
메서드를 사용할 수 있습니다.
map.forEach((key, value) -> {
System.out.println("Key: " + key + ", Value: " + value);
});
특징
- 구조: 람다 표현식을 통해 키와 값에 동시에 접근.
- 장점:
- 최신 스타일의 코드로 가독성 높음.
- 병렬 처리를 지원하는 스트림과 쉽게 결합 가능.
- 단점:
- Java 8 이상에서만 사용 가능.
5. Iterator 이용
Iterator
를 사용해 entrySet()
이나 keySet()
을 탐색합니다.
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
특징
- 구조:
Iterator
를 통해 순회하며 요소 제거도 가능. - 장점:
- 순회 중 안전하게 요소를 제거할 수 있음.
- 단점:
- 코드가 다소 장황해짐.
차이점 요약
순회 방법 | 키 접근 | 값 접근 | 성능 | 사용 시기 |
---|---|---|---|---|
entrySet() |
가능 | 가능 | 효율적 | 키와 값을 동시에 접근할 때 |
keySet() |
가능 | 가능 | 비효율적 | 키만 필요하거나 간단한 순회 시 |
values() |
불가능 | 가능 | 효율적 | 값만 필요한 경우 |
forEach() |
가능 | 가능 | 효율적 | 람다를 활용하여 코드 간결화 시 |
Iterator |
가능 | 가능 | 보통 | 순회 중 요소를 제거해야 할 때 |
추천
- 키와 값을 모두 접근해야 한다면
entrySet()
이나forEach()
가 가장 효율적. - 키만 필요하면
keySet()
, 값만 필요하면values()
. - 요소 제거를 포함한 순회는
Iterator
를 사용.
'프로그래밍 > java' 카테고리의 다른 글
HashMap 순회 에러 방지 (0) | 2025.01.02 |
---|---|
hashset, treeset 비교 (0) | 2024.12.22 |
hashmap vs treemap 비교 (1) | 2024.12.21 |
[java]keystore 경로, list 확인 (0) | 2023.02.02 |
이클립스 주요 단축키 (0) | 2022.12.30 |