Map 컬렉션 클래스
컬렉션에서 List와 Set은 Collection을 상속받고 있지만 Map은 Collection을 상속받고 있지 않고 다른 저장 방식을 가지고 있습니다.
엄밀히 말하면 Collection이 아니지만 일반적으로 List와 Set과 같이 컬렉션으로 구분합니다.
Map은 Key와 Value를 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다.
여기서 키(key)는 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다.
또한 맵은 값의 순서가 없으며 키는 중복을 허용하지 않지만 벨류는 중복을 허용합니다.
1. 저장 순서X
2. Key는 중복 허용X
3. Value는 중복 허용
Map을 상속받고 있는 대표적인 컬렉션 클래스
1. HashMap<K, V>
2. Hashtable<K, V>
3. TreeMap<K, V>
HashMap<K, V>
HashMap은 Map에서 가장 많이 사용되는 컬렉션입니다.
HashSet과 마찬가지로 해쉬 알고리즘을 사용하여 검색 속도가 빠릅니다.
HashMap<K, V>의 주요 메소드
메소드 | 설명 |
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거 |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지 확인 |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지 확인 |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값 반환 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null 반환 |
boolean isEmpty() | 해당 맵이 비어있는지 확인 |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체 반환 |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값 매핑 |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑 제거 |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑 제거 |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체 |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체 |
int size() | 해당 맵의 매핑의 총 개수를 반환 |
package com.test03;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MTest01 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
for(int i = 111; i < 116; i++) {
// map.put(k, v)
map.put(i, i+"abc");
}
System.out.println(map);
System.out.println(map.get(111));
map.put(111, "115abc");
System.out.println(map);
prn(map);
}
public static void prn(Map<Integer, String> map) {
//value만 뺴오는방법
Collection<String> values = map.values();
System.out.println(values);
//key만 빼오는방법
Set<Integer> keys = map.keySet();
System.out.println(keys);
//Entry : Key와 Value를 같이 관리
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
// Entry<K,V>라는 객체들을 Set으로 관리하겠다.
// Map은 key를 통해 value를 가지고 올 수 있음. (map.get(key) -> value)
// Entry는 key와 value를 각각 가지고 올 수 있음. *entry.getKey(), entry.getValue())
for (Entry<Integer, String> entry : entrySet) {
System.out.printf("%d : %s\n", entry.getKey(), entry.getValue());
}
}
}
prn메소드를 제외하고 메인메소드만 먼저 본다고 가정하겠습니다.
Map<Integer, String> map = new HashMap<Integer, String>();
map의 Key는 Integer형이고 Value는 String형입니다.
for(int i = 111; i < 116; i++) {
// map.put(k, v)
map.put(i, i+"abc");
}
System.out.println(map);
for문에서 키값은 111부터 115까지 입력했으며 value에는 키값+abc의 값을 입력했습니다.
출력하면 111=111abc부터 115=1115abc까지 5개의 값이 출력이 됩니다.
출력 결과를 보면 순서가 없습니다.
System.out.println(map.get(111));
key가 111인 value를 불러옵니다. 111abc가 호출되겠네요.
map.put(111, "115abc");
System.out.println(map);
key가 111인 것의 value를 115abc로 대입합니다.
value는 중복을 허용하기 때문에 가능합니다.
prn메소드의 경우 주석으로 해당 코드의 설명을 적어 놓았습니다.
혹시 읽고 이해가 안 가시는 부분은 댓글 달아주세요!
Hashtable<K, V>의 경우 HashMap<K, V>과 거의 동일하다고 합니다. 현재는 기존 코드의 호환성을 위해서만 남아있다고 합니다.
TreeMap<K, V>도 이번 포스팅에서는 다루지 않겠습니다.
(사실 수업 시간에 안 배웠습니다...!)
제가 실력이 좋아지고 TreeMap도 공부를 하게 된다면 이후 후속 포스팅하도록 하겠습니다!
'Java 관련 > Java' 카테고리의 다른 글
[Java] Comparable & Comparator (0) | 2021.11.17 |
---|---|
[Java] 이터레이터(iterator) (0) | 2021.11.16 |
[Java] Set Collection(셋 컬렉션) (0) | 2021.11.14 |
[Java] List Collection(리스트 컬렉션) (0) | 2021.11.13 |
[Java] 백터(Vector) & 향상된 for문(foreach) (0) | 2021.11.12 |