Map 컬렉션 클래스란?
Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가집니다.
Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(Key-value 방식)을 사용합니다.
여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할입니다.
Map 인터페이스를 구현한 모든 Map 컬랙션 클래스는 다음과 같은 특징을 가집니다.
- 요소의 저장 순서를 유지하지 않습니다.
- 키는 중복을 허용하지 않지만, 값의 중복은 허용합니다.
대표적인 Map 컬렉션 클래스에 속하는 클래스는 다음과 같습니다.
- HashMap <K, V>
- HashTable <K, V>
- TreeMap <K, V>
HashMap <K, V> 클래스
HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클래스입니다.
HashMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없습니다.
HashMap <K, V> 클래스에서 제공하는 주요 메서드는 다음과 같습니다.
메서드 | 설명 |
void clear() | 모든 mapping을 제거함 |
boolean containsKey(Object key) | map이 전달된 key를 포함하고 있는지를 확인 |
boolean containsValue(Object value) | map이 전달된 값에 해당하는 하나 이상의 key를 포함하고 있는지를 확인 |
V get(Object key) | map에서 전달된 key에 대응하는 value를 반환 만약 해당 map이 전달된 key를 포함한 mapping을 포함하고 있지 않으면 null을 반환 |
boolean isEmpty() | map이 비어있는지를 확인 |
Set<K> keySet() | map에 포함되어 있는 모든 key로 만들어진 set 객체를 반환 |
V put(K key, V value) | map에 전달된 key에 대응하는 value로 특정 값을 매핑함 |
V remove(Object key) | map에 전달된 key에 대응하는 mapping을 제거함 |
boolean remove(Object key, Object value) | map에서 특정 값에 대응하는 특정 key의 mapping을 제거함 |
V replace(K key, V value) | map에서 전달된 key에 대응하는 값을 특졍 값으로 대체함 |
boolean replace(K key, V oldValue, V newValue) | map에서 특정 값에 대응하는 전달된 key의 값을 새로운 값으로 대체함 |
int size() | map의 총 mapping 개수를 반환함 |
다음 예제 코드를 통하여 HashMap 메서드를 이용하여 map을 생성하고 조작하는 방법을 알아봅시다.
import java.util.HashMap;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
// put() 메서드를 이용해 요소 추가
hm.put("삼십", 30);
hm.put("십", 10);
hm.put("사십", 40);
hm.put("이십", 20);
// 요소 확인
System.out.println("맵에 저장된 키 : " + hm.keySet());
System.out.printf("값: ");
for (String key : hm.keySet()){
System.out.print(hm.get(key)+ " ");
}
System.out.println("");
// remove() 메서드를 이용해 요소 제거
hm.remove("사십");
// 요소 확인
Iterator<String> keys = hm.keySet().iterator();
while (keys.hasNext()){
String key = keys.next();
System.out.println(String.format("키: %S, 값: %s", key, hm.get(key)));
}
//replace() 메서드를 이용한 수정
hm.replace("이십", 200);
for(String key : hm.keySet()){
System.out.println(String.format("키: %S, 값: %s", key, hm.get(key)));
}
// size() 메서드를 이용한 요소 개수 확인
System.out.println("맵의 크기는: " + hm.size());
}
}
// 출력 결과
맵에 저장된 키 : [이십, 삼십, 사십, 십]
값: 20 30 40 10
키: 이십, 값: 20
키: 삼십, 값: 30
키: 십, 값: 10
키: 이십, 값: 200
키: 삼십, 값: 30
키: 십, 값: 10
맵의 크기는: 3
위위 코드 예제에서 사용된 keySet() 메서드는 해당 맵에 포함된 모든 키 값을 하나의 집합(Set)으로 반환해 줍니다.
Hashtable <K, V> 클래스
Hashtable 클래스에서 사용할 수 있는 메서드는 HashMap 클래스에서 사용할 수 있는 메서드와 거의 같습니다.
하지만 현제에는 기존 코드와의 호환성을 위해서만 남아있으므로, Hashtable 클래스보다는 HashMap 클래스를 사용하는 것이 좋습니다.
TreeMap <K, V> 클래스
TreeMap 클래스는 키와 값을 한 쌍으로 하는 데이터를 이진 검색 트리(binary search tree) 형태로 저장합니다.
이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠릅니다.
TreeMap 클래슨느 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없습니다.
하지만 같은 값을 다른 키로 저장하는 것은 가능합니다.
TreeMap <K, V> 클래스에서 제공하는 주요 메서드는 다음과 같습니다
메소드 | 설명 |
Map.Entry<K, V> ceilingEntry(K key) | map에서 전달된 key와 같거나, 전달된 key보다 큰 key 중 가장 작은 key와 그에 대응하는 value의 엔트리를 반환함. 만약 해당하는 key가 없으면 null 반환 |
K ceilingKey(K key) | map에서 전달된 key와 같거나, 전달된 key보다 큰 key 중에서 가장 작은 key를 반환함 만약 해당하는 key가 없으면 null 반환 |
void clear() | map의 모든 mapping을 제거함 |
boolean containsKey(Object key) | map에 전달된 key를 포함하고 있는지를 반환 |
boolean containsValue(Object value) | map이 전달된 value에 해당하는 하나 이상의 key를 포함하고 있는지를 확인 |
NavigableMap<K, V> descendingMap() | map에 포함된 모든 mapping을 역순으로 반환 |
Set<Map.Entry<K, V>> entrySet() | map에 포함된 모든 mapping을 Set 객체로 반환 |
Map.Entry<K, V> firstEntry() | map에서 현재 가장 작은(first) key와 그에 대응하는 value의 엔트리를 반환 |
K firstKey() | map에서 가장 작은(first) key를 반환 |
Map.Entry<K, V>floorEntry(K key) | map에서 전달된 key와 같거나, 전달된 key보다 작은 key 중에서 가장 큰 key와 그에 대응하는 value의 엔트리를 반환. 만약 해당하는 key가 없으면 null을 반환 |
K floorKey(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
SortedMap<K, V> headMap(K toKey) | 해당 맵에서 전달된 키보다 작은 키로 구성된 부분만을 반환함. |
Map.Entry<K, V> higherEntry(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K higherKey(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
Map.Entry<K, V> lastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환함. |
K lastKey() | 해당 맵에서 현재 가장 큰(마지막) 키를 반환함. |
Map.Entry<K, V> lowerEntry(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K lowerKey(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
Map.Entry<K, V> pollFirstEntry() | 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
Map.Entry<K, V> pollLastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(K key, V value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
SortedMap<K, V> subMap(K fromKey, K toKey) | 해당 맵에서 fromKey부터 toKey까지로 구성된 부분만을 반환함. 이때 fromKey는 포함되나, toKey는 포함되지 않음. |
SortedMap<K, V> tailMap(K fromKey) | 해당 맵에서 fromKey와 같거나, fromKey보다 큰 키로 구성된 부분만을 반환함. |
다음의 예제 코드는 TreeMap 메서드를 이용하여 맵을 생성하고 조작하는 예제입니다.
import java.util.Iterator;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
TreeMap<Integer, String> tm = new TreeMap<>();
// 요소 저장
tm.put(30, "삼십");
tm.put(10, "십");
tm.put(40, "사십");
tm.put(20, "이십");
// 요소 출력
System.out.println("맵에 저장된 키들의 집합 :" + tm.keySet());
for (Integer key: tm.keySet()){
System.out.println(String.format("키 : %s, 값: %s",key, tm.get(key)));
}
// 요소 제거
tm.remove(40);
//요소 출력
Iterator<Integer> keys = tm.keySet().iterator();
while (keys.hasNext()){
Integer key = keys.next();
System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}
//요소 수정
tm.replace(20, "twenty");
for(Integer key : tm.keySet()){
System.out.println(String.format("키: %s, 값: %s ",key,tm.get(key)));
}
System.out.println("맵의 크기 :" + tm.size());
}
}
// 출력 결과
맵에 저장된 키들의 집합 :[10, 20, 30, 40]
키 : 10, 값: 십
키 : 20, 값: 이십
키 : 30, 값: 삼십
키 : 40, 값: 사십
키 : 10, 값 : 십
키 : 20, 값 : 이십
키 : 30, 값 : 삼십
키: 10, 값: 십
키: 20, 값: twenty
키: 30, 값: 삼십
맵의 크기 :3
Reference
'JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크(Collection Framework) - Iterator (6) (0) | 2023.03.11 |
---|---|
[JAVA] 컬렉션 프레임워크(Collection Framework) - Stack,Queue (5) (0) | 2023.03.11 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - Set <E> (3) (0) | 2023.03.10 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - List <E> (2) (0) | 2023.03.09 |
[JAVA] 컬렉션 프레임워크(Collection Framework) (1) (0) | 2023.03.09 |