Map
Map이란?
Java의 Map
은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조이다. 키 값은 유일해야하며, 하나의 키에 하나의 값만 대응될 수 있다. Map
인터페이스를 사용하면 중복되지 않는 키로 데이터를 효율적으로 관리하고 검색할 수 있다.
Map 종류
HashMap
- 가장 많이 사용되는 Map 구현체로 해시 테이블을 사용해 데이터를 저장하므로서 검색과 삽입 속도가 빠르다.
- 입력 순서를 보장하지 않는다.
LinkedHashMap
- HashMap과 동일하지만, 삽입된 순서를 유지한다.
- 데이터를 순차적으로 접근해야 할 때 유용하다.
TreeMap
- 키의 자연 순서 또는 제공된
Comparator
에 따라 정렬된 순서를 유지한다. - 내부적으로 이진 검색 트리(Red-Black Tree)를 사용하므로 삽입, 삭제, 검색의 시간복잡도는 O(logN)이다.
1
2
3
4
5
6
7
8
// Comparator 적용 방법
TreeMap<Integer, String> treeMap = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
// 내림차순 정렬
return Integer.compare(b, a);
}
});
Map 주요 메서드
put(K key, V value)
키와 값을 Map
에 삽입한다.
1
map.put("Apple", 3);
get(Object key)
주어진 키에 대응하는 값을 반환한다.
1
System.out.println("Apple의 값: " + map.get("Apple")); // 출력: Apple의 값: 3
대응하는 키가 없으면 null
을 반환한다.
remove(Object key)
키-값 쌍을 삭제한다.
1
map.remove("Banana");
만약 키 값이 존재하지 않는다면 null
을 반환한다.
containsKey(Object key)
주어진 키가 Map에 존재하는지 확인한다.
1
System.out.println("Apple 키가 존재하는가? " + map.containsKey("Apple")); // 출력: Apple 키가 존재하는가? true
containsValue(Object value)
주어진 값이 Map에 존재하는지 확인합니다.
1
System.out.println("값 7이 존재하는가? " + map.containsValue(7)); // 출력: 값 7이 존재하는가? false
값이 여러 개 존재할 경우에는 첫 번째로 일치하는 값만을 확인하고, 그 값을 가진 키를 반환하지 않는다.
size()
Map에 저장된 키-값 쌍의 개수를 반환한다.
1
System.out.println("Map의 크기: " + map.size()); // 출력: Map의 크기: 1
keySet()
Map
의 모든 키를 Set으로 반환하여 출력한다.
1
System.out.println("키 목록: " + keys); // 출력: 키 목록: [Apple]
values()
Map
의 모든 값을 Collection으로 반환하여 출력한다.
1
2
Collection<Integer> values = map.values();
System.out.println("값 목록: " + values); // 출력: 값 목록: [3]
Collection
으로 받은 값들은 다른 자료 구조로 변환하여 상황에 맞게 사용할 수 있다.
1
2
3
Collection<Integer> values = map.values();
ArrayList<Integer> arrayList = new ArrayList<>(values);
Queue<Integer> queue = new LinkedList<>(values);
entrySet()
Map
의 키-값 쌍을 Set으로 반환하여 각각의 항목을 출력한다. Map
을 순회할 때 많이 사용한다.
1
2
3
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("키: " + entry.getKey() + ", 값: " + entry.getValue());
}
getOrDefault(Object key, V defaultValue)
Map에 주어진 key가 존재하면 그 값을 반환하고, 존재하지 않으면 defaultValue를 반환한다. 이를 사용하면 containsKey
조건문을 사용하지 않고 코드를 축약해서 표현 할 수 있다.
1
2
3
4
int value;
if(!map.containsKey("Banana")) value = 0;
// getOrDefault 사용
int value = map.getOrDefault("Banana",0);
1
2
3
4
5
// map을 사용하여 바나나의 개수를 저장하는 경우
if(!map.containsKey("Banana")) map.put("Banana",1);
else map.put(map.get("Banana") + 1);
// getOrDefault 사용
map.put("Banana", map.getOrDefault("Banana", 0) + 1);
This post is licensed under CC BY 4.0 by the author.