컬렉션 프레임워크 (Collection Framework)
- 여러 가지 자료 구조(Data Structure)를 쉽게 사용할 수 있도록 자바에서 미리 구현하여 제공하는 클래스를 말한다.
- 대표적인 인터페이스로는 List 인터페이스, Set 인터페이스, Map 인터페이스 등이 있다.
Map 계열 클래스
- 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합이며, 이를 엔트리(entry)라고 한다.
- 키는 중복을 허용하지 않으며, 하나의 키는 하나의 값과 연결된다.
- key를 이용하여 저장한 값을 얻을 수 있다.
- 대표적인 클래스로는 HashMap 클래스와 TreeMap 클래스 등이 있다.
Map 인터페이스에 선언되어 있는 주요 메소드들
- 모든 Map 인터페이스를 상속하는 Map 구현 클래스에 공통적으로 존재하는 주요 메소드이다.
추상 메소드 | 설명 |
V put(K key, V value) | 특정 키와 값을 매칭하여 추가하거나 갱신한다. |
V get(Object key) | 지정한 키에 해당하는 값을 리턴하며, 키가 존재하지 않으면 null을 리턴한다. |
V remove(Object key) | 지정된 키와 매핑된 값을 제거하고, 값을 리턴한다. |
boolean containsKey(Object key) | 지정된 키가 맵에 있는 지 여부를 리턴한다. |
boolean containsValue(Object value) | 지정된 값이 맵에 있는 지 여부를 리턴한다. |
Set<K> keySet() | 맵에 있는 모든 키를 Set 타입으로 리턴한다. |
Collection<V> values() | 맵에 있는 모든 값을 Collection 타입으로 리턴한다. |
Set<Map.Entry<K,V>> entrySet() | 맵에 있는 모든 키와 값 쌍을 포함하는 Set 타입을 리턴한다. |
boolean isEmpty() | 맵에 객체가 존재하지 않는 지 판별한다. |
default V replace(K key, V Value) | 지정된 키에 해당하는 값을 매개변수의 값으로 변경하고, 이전 값을 리턴한다. |
default boolean replace(K key, V oldValue, V newValue) | 지정된 키의 현재 값과 변경될 값을 매개변수로 전달하며, 변경에 성공하면 true를 리턴한다. |
void clear() | 맵에 저장된 모든 객체를 제거한다. |
HashMap 클래스
- Map 계열에서 가장 많이 사용되는 컬레션이다.
- 객체를 (key, value) 쌍으로 저장하며 key를 이용해서 value에 접근한다.
- HashMap에 저장된 객체 중 "key = value" 형태의 데이터를 엔트리(entry)라고 한다.
- HashMap 클래스 기능 구현 예시
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
// HashMap 객체 생성
Map<String, Integer> studentScores = new HashMap<>();
// 데이터 추가
studentScores.put("홍길동", 85);
studentScores.put("고길동", 90);
studentScores.put("이지함", 95);
studentScores.put("안중근", 80);
// 데이터 조회
System.out.println("홍길동's score: " + studentScores.get("홍길동")); // 출력: 홍길동's score: 85
System.out.println("이지함's score: " + studentScores.get("이지함")); // 출력: 이지함's score: 95
// 데이터 수정
studentScores.put("홍길동", 88); // 홍길동의 점수를 85에서 88로 수정
// 데이터 삭제
studentScores.remove("고길동"); // 고길동 데이터 제거
// 모든 학생과 점수 출력
System.out.println("Current student scores:");
for (Map.Entry<String, Integer> entry : studentScores.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 특정 학생의 점수가 존재하는지 확인
String student = "이순신";
if (studentScores.containsKey(student)) {
System.out.println(student + "'s score is " + studentScores.get(student));
} else {
System.out.println(student + "'s score is not recorded.");
}
}
}
TreeMap 클래스
- SortedMap 인터페이스를 구현하고 있는 클래스이다.
- HashMap과는 다르게 엔트리 저장 시 key가 오름차순으로 정렬되어 저장된다는 특징이 있다.
- 주요 메소드
주요 메소드 | 설명 |
K firstKey() | 첫 번째(가장 작은) key를 리턴한다. |
K lastKey() | 마지막(가장 높은) key를 리턴한다. |
K ceilingKey(K key) | 지정된 키보다 크거나 같은 키들 중에서 가장 작은 키를 리턴하며 존재하지 않으면 null을 반환한다. |
K lowerKey(K key) | 지정된 키보다 작은 키들 중에 가장 큰 키를 리턴한다. |
SortedMap<K,V> headMap(K toKey, boolean inclusive) | inclusive가 false인 경우, toKey보다 작은 키를 가지는 키들을 정렬한 후 리턴하고 true인 경우, toKey를 포함한 작은 키를 가지는 키들을 정렬한 후 리턴한다. |
SortedMap<K,V> tailMap(K fromKey, boolean inclusive) | inclusive가 false인 경우, fromKey보다 크거나 같은 키들을 리턴하고 true인 경우, fromKey보다 큰 키를 가지는 키들을 리턴한다. |
SortedMap<K,V> subMap(K fromKey, K toKey) | fromKey와 toKey 사이의 키 값을 가지는 키들을 리턴한다. |
Map.Entry<K,V> firstEntry() | 가장 작은 키 값을 가지는 엔트리를 리턴한다. |
Map.Entry<K,V> lastEntry() | 가장 높은 키 값을 가지는 엔트리를 리턴한다. |
Set<K> keySet() | 키들을 정렬된 Set으로 리턴한다. |
NavigableSet<K> descendingKeySet() | 키들을 역순으로 된 NavigableSet으로 리턴한다. |
NavigableMap<K,V> descendingMap() | 맵의 객체를 역순으로 된 NavigableMap으로 리턴한다. |
- TreeMap 클래스 기능 구현 예시
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
// TreeMap 객체 생성
TreeMap<Integer, String> treeMap = new TreeMap<>();
// 데이터 추가
treeMap.put(3, "Three");
treeMap.put(1, "One");
treeMap.put(2, "Two");
treeMap.put(4, "Four");
// 데이터 조회
System.out.println("TreeMap contents:");
for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 데이터 수정 (기존 값 덮어쓰기)
treeMap.put(2, "New Two");
// 데이터 삭제
treeMap.remove(3);
// 수정된 데이터 출력
System.out.println("TreeMap contents after modification:");
for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 특정 키의 값 조회
int key = 4;
if (treeMap.containsKey(key)) {
String value = treeMap.get(key);
System.out.println("Value for key " + key + ": " + value);
} else {
System.out.println("Key " + key + " not found.");
}
}
}
⊙ 참고 문헌
- 이병승, 「초보 개발자를 위한 자바:한 권으로 배우는 자바 마스터 가이드 북」, 영진닷컴, 2024, p730 - 738
- 이병승, 「초보 개발자를 위한 자바:한 권으로 배우는 자바 마스터 가이드 북」, 영진닷컴, 2024, p773 - 774
- 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-15. 컬렉션 프레임워크」, 제로베이스, 2024, https://zero-base.co.kr/
- Java™ Platform, Standard Edition 8 API Specification, 2024.07.23, JavaDoc