프로그래밍 공부
자바 컬렉션 - Map 본문
Map
- 자바에서
Map
은 키-값 쌍을 저장하는 데이터 구조로, 특정 키에 대한 값을 효율적으로 저장하고 검색할 수 있도록 설계됨 Map
인터페이스는 다양한 구현체를 가지고 있으며, 각각의 구현체는 서로 다른 특성과 성능을 제공함.- Collection 프레임워크의 일부지만 Collection 인터페이스를 구현하지는 않음
- HashMap
- 해시맵은 열쇠를 Null값과 저장할 수 있게 해줌
- 정렬되지 않고 순서가 없음
- HashTable
- Hashtable은 Vector와 비슷함, 동기화가 되어있음
스레드가 해시맵에 비해 더 안전하고, 분류되어 있지도 순서가 있지도 않음
- Hashtable은 Vector와 비슷함, 동기화가 되어있음
- LinkedHashMap
- 삽입 순서가 유지됨, 정렬되어 있지는 않음
- 해시맵보다 삽입 삭제 속도는 느림
- 요소간 연결이 있어서 이터레이션은 훨씬 빠름
- TreeMap
- 정럴된 상태로 데이터가 저장됨
1. Map 인터페이스
Map
인터페이스는 키와 값을 매핑하는 메서드를 정의하며, 주요 메서드는 다음과 같다:
put(K key, V value)
: 지정된 키와 값을 맵에 추가.get(Object key)
: 지정된 키에 대한 값을 반환합니다. 키가 존재하지 않으면null
을 반환.remove(Object key)
: 지정된 키와 그에 해당하는 값을 제거.containsKey(Object key)
: 맵에 지정된 키가 존재하는지 확인.keySet()
: 맵에 있는 모든 키의 집합(Set)을 반환.values()
: 맵에 있는 모든 값의 컬렉션(Collection)을 반환.entrySet()
: 맵에 있는 모든 키-값 쌍의 집합(Set)을 반환.
2. Map의 주요 구현체
2.1. HashMap
- 특징: 해시 테이블을 기반으로 구현되어 있으며, 키의 해시 값을 이용하여 요소를 저장.
- 특징: 순서가 보장되지 않으며, 키와 값에
null
을 허용. - 성능: 평균적으로 O(1)의 시간 복잡도를 가짐.
예제:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
System.out.println(map.get("Apple")); // 1
System.out.println(map.containsKey("Banana")); // true
}
}
2.2. LinkedHashMap
- 특징:
HashMap
의 기능을 확장하여, 요소를 추가한 순서대로 유지. - 사용 용도: 삽입 순서를 유지해야 할 때 유용함.
- 성능: 평균적으로 O(1)의 시간 복잡도를 짐.
예제:
import java.util.LinkedHashMap;
public class LinkedHashMapExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
2.3. TreeMap
- 특징: 정렬된 키를 유지하며, 이진 검색 트리를 기반으로 구현됨.
- 사용 용도: 키를 정렬된 상태로 저장해야 할 때 유용함.
- 성능: O(log n)의 시간 복잡도를 가짐.
- 키에
null
을 허용하지 않음. - TreeMap 전용 메서드
firstKey()
- 설명: 맵에서 가장 작은 키를 반환.
- 예제:
String first = treeMap.firstKey();
lastKey()
- 설명: 맵에서 가장 큰 키를 반환.
- 예제:
String last = treeMap.lastKey();
higherKey(K key)
- 설명: 지정된 키보다 큰 키 중에서 가장 작은 키를 반환. 존재하지 않으면
null
을 반환. - 예제:
String higher = treeMap.higherKey("Banana");
- 설명: 지정된 키보다 큰 키 중에서 가장 작은 키를 반환. 존재하지 않으면
lowerKey(K key)
- 설명: 지정된 키보다 작은 키 중에서 가장 큰 키를 반환. 존재하지 않으면
null
을 반환. - 예제:
String lower = treeMap.lowerKey("Banana");
- 설명: 지정된 키보다 작은 키 중에서 가장 큰 키를 반환. 존재하지 않으면
ceilingKey(K key)
- 설명: 지정된 키보다 크거나 같은 키 중에서 가장 작은 키를 반환. 존재하지 않으면
null
을 반환. - 예제:
String ceiling = treeMap.ceilingKey("Banana");
- 설명: 지정된 키보다 크거나 같은 키 중에서 가장 작은 키를 반환. 존재하지 않으면
floorKey(K key)
- 설명: 지정된 키보다 작거나 같은 키 중에서 가장 큰 키를 반환. 존재하지 않으면
null
을 반환 - 예제:
String floor = treeMap.floorKey("Banana");
- 설명: 지정된 키보다 작거나 같은 키 중에서 가장 큰 키를 반환. 존재하지 않으면
subMap(K fromKey, K toKey)
- 설명: 지정된 키 범위에 해당하는 서브맵을 반환.
fromKey
는 포함되고toKey
는 포함되지 않음. - .예제:
SortedMap<String, Integer> subMap = treeMap.subMap("Apple", "Cherry");
- 설명: 지정된 키 범위에 해당하는 서브맵을 반환.
headMap(K toKey)
- 설명: 지정된 키보다 작은 모든 키-값 쌍을 포함하는 맵을 반환.
- 예제:
SortedMap<String, Integer> headMap = treeMap.headMap("Banana");
tailMap(K fromKey)
- 설명: 지정된 키와 그보다 큰 모든 키-값 쌍을 포함하는 맵을 반환.
- 예제:
SortedMap<String, Integer> tailMap = treeMap.tailMap("Banana");
- Key대신 Entry를 쓰면 Map.Entry 객체를 반환
- Map.Entry<K, V> ← 리턴 타입
- 키와 값 모두 필요할 때 사용
firstEntry()
,higherEntry(K key)
등등이 있음
예제:
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
map.put("Banana", 2);
map.put("Apple", 1);
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
2.4. Hashtable
- 특징:
HashMap
과 유사하지만, 동기화되어 멀티스레드 환경에서 안전함. - 사용 용도: 스레드 안전이 필요한 경우 사용합니다. 그러나 성능이 떨어질 수 있음.
- 성능: 평균적으로 O(1)의 시간 복잡도를 가짐.
예제:
import java.util.Hashtable;
public class HashtableExample {
public static void main(String[] args) {
Hashtable<String, Integer> table = new Hashtable<>();
table.put("Apple", 1);
table.put("Banana", 2);
System.out.println(table.get("Apple")); // 1
}
}
요약
Map
인터페이스는 키-값 쌍을 저장하는 데이터 구조임.- 주요 구현체:
HashMap
,LinkedHashMap
,TreeMap
,Hashtable
이 있으며, 각각 특성과 성능이 다름.HashMap
: 빠른 성능, 순서 없음.LinkedHashMap
: 삽입 순서 유지.TreeMap
: 정렬된 키 유지.Hashtable
: 스레드 안전.
'Programming > JAVA' 카테고리의 다른 글
자바 제네릭 (0) | 2024.10.09 |
---|---|
자바 컬렉션 - 객체 정렬 (0) | 2024.10.09 |
자바 컬렉션 - Queue, PriorityQueue (0) | 2024.10.08 |
자바 컬렉션 - Set 인터페이스 (0) | 2024.10.08 |
자바 컬렉션 - List 인터페이스 (3) | 2024.10.08 |
Comments