JAVA 18. Map 클래스

김창민·2024년 7월 30일

BE

목록 보기
20/50

오라클 맵 스팩

맵은 사실 컬렉션 클래스가 아니지만, 그냥 포함해서 말하고 있다. 4개의 컬렉션 (List, Queue, Deque, Set)과 더불어 많이 사용하기 때문에 잘 알아둬야 한다.

맵은 기본적으로 Key:Value구조로 이루어져있다. Key는 고유하며, 최대 하나의 값에 매핑될 수 있다.

주요 메소드

put(key, value) : key,value를 map에 추가
get(key) : key에 대응하는 value를 반환
remove(key) : key와 대응하는 value를 삭제
containsKey(key) : key가 맵에 존재하는지 여부 확인
containsValue(value) : value가 맵에 존재하는지 여부 확인
keySet() : 모든 key를 set으로 반환
values() : 모든 값을 포함한 Collection을 반환
entrySet() : 모든 키-값 쌍을 포함한 set을 반환

구현 클래스

AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap

이렇게 많은 구현 클래스가 있지만, 자주 사용하는 7개를 정리한다.

HashMap

해시 테이블 기반의 구현체로 빠른 검색, 삽입, 삭제를 제공한다.
Get, put의 시간복잡도가 O(1)이다.
Map<String,Integer> hmap = new HashMap<>();이런식으로 생성하면 된다.

ConcurrentHashMap

멀티 스레드 환경에서 안전하게 사용하는 HashMap이다.
세그먼트 단위로 락을 거는 특징이 있다.
Map<String,Integer> hmap = new ConcurrentHashMap<>();

LinkedHashMap

해시 테이블과 이중 연결 리스트를 기반으로 동작하는 Map이다.
입력된 순서 or 접근 순서를 유지하며 키-값 쌍을 저장하는 기능이 있다.
즉, 삽입 순서를 유지하는 HashMap이지만, 생성자에서 accessOrder를 true로 설정시 접근 순서로 변경할 수 있다.

LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) 여기서 loadFactor는 부하 계수.

TreeMap

NavigableMap인터페이스를 구현하여 키를 기준으로 오름차순으로 정렬된 Map이다. 내부적으론 Red-Black Tree를 기반으로 구현되어 있다.

키의 순서를 바꾸고 싶으면 Comparator를 구현하여 전달하면 된다.

검색, 삽입, 삭제 연산의 시간 복잡도는 O(log n)이다.

메소드

firstKey(): 가장 첫 번째(최소) 키를 반환
lastKey(): 가장 마지막(최대) 키를 반환
headMap(K toKey): 주어진 키보다 작은 키를 포함하는 서브맵을 반환
tailMap(K fromKey): 주어진 키보다 크거나 같은 키를 포함하는 서브맵을 반환
subMap(K fromKey, K toKey): 주어진 두 키 사이의 서브맵을 반환
ceilingKey(K key): 주어진 키보다 크거나 같은 가장 작은 키를 반환
floorKey(K key): 주어진 키보다 작거나 같은 가장 큰 키를 반환
higherKey(K key): 주어진 키보다 큰 가장 작은 키를 반환
lowerKey(K key): 주어진 키보다 작은 가장 큰 키를 반환

Hashtable

해시 테이블을 기반으로 한 Map이다. HashMap에서 동기화가 제거된 버전이라서 잘 사용하진 않는다.

WeakHashMap

가비지 컬렉터가 수거대상으로 설정 가능한 약한 참조를 이용한 HashMap이다. 메모리 누수를 방지하기 위해 이런 방법을 사용했으며, 메모리 효율성이 높다.

EnumMap

열거형을 키로 사용하는 맵이다. 이를 통해 효율적이고 안전한 방식으로 열거형 기반의 맵을 제공한다.

profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글