HashMap 이란?
Map 인터페이스를 구현하고 있는 대표적인 자바 클래스. key-value쌍으로 되어있다. Map의 대표적인 특징은 key는 정확히 하나의 value만 가질 수 있다.
- 순서는 유지되지 않는다.(순서가 유지되어야 하는 경우 LinkedHashMap사용)
- 동일 키값으로 추가 시 덮어쓰기 된다.
- value값엔 null값도 넣을 수 있다.
- 해싱 검색을 사용하기 때문에 대용량 데이터 관리 시에 좋은 성능을 보인다.
위 그림과 같이 HashMap은 내부에 키와 값을 저장하는 자료 구조를 가지고 있다. 해시 함수를 통해 키와 값이 저장되는 위치를 결정하므로, 그 위치를 알 수 없고 삽입되는 순서와 들어 있는 위치 또한 관계가 없다.(삽입한 순서에 따라 정렬되지 않는다.)
HashMap은 왜 필요할까?
List 형태를 사용하지 않고 HashMap을 사용하는 이유는 바로 성능 때문이다. 만약 List를 사용했다면 검색하는데 있어 시간복잡도는 O(n)으로 나타날것이다. 반면 HashMap은 삽입, 검색 시간에 시간복잡도 O(1)이라는 이점을 가지고 있다.
key값의 hashCode를 index로 Array에 값을 저장하기때문에 검색속도는 매우 빠르다. 또한 Hashing을검색을 사용하고 있어 대용량 데이터 관리에도 적합한 성능을 보여주고 있다. key의 값은 중복되지 않고, value값은 중복이 허용된다.
2. HashMap 생성자/메소드
생성자/메소드설명
HashMap() | 기본 생성자 HashMap<K, V> hashmap = new HashMap<>(); |
HashMap(int initlalCapacity) | 주어진 값을 초기 용량으로 하는 HashMap을 생성 |
HashMap(Map m) | 주어진 Map에 저장된 모든 요소를 포함하는 HashMap을 생성 |
void clear() | HashMap에 저장된 모든 객체를 제거 |
Object clone() | 현재 HashMap을 복제하여 반환 newMap = (HashMap)map.clone(); |
boolean containsKey(K Key) | HashMap에 지정된 키(Key)가 포함되어 있는지 알려준다. |
boolean containsValue(V Value) | HashMap에 지정된 값(Value)가 포함되어 있는지 알려준다. |
Set entrySet() | HashMap에 저장된 Key - Value값을 엔트리(키와 값을 결합) 형태로 Set에 저장하여 반환 |
V get(K Key) | 지정된 Key의 값을 반환 |
bloolean isEmpty | HashMap이 비어있는지 확인한다. |
Set keySet() | HashMap에 저장된 모든 키가 저장된 Set을 반환 |
V put(K Key, V Value) | HashMap에 키와 값을 저장 |
void putAll(Map m) | 주어진 Map의 모든 요소를 HashMap에 저장 |
V remove(Object Key) | HashMap에서 주어진 key에 해당하는 값을 제거 |
int size() | HashMap에 저장된 요소의 개수를 반환 |
Collection values() | HashMap에 저장된 모든 값을 컬렉션 형태로 반환 |
V getOrDefault(Object Key, Object defaultValue) | 지정된 Key의 값을 반환하고 없을 시에는 defalultValue를 반환 |
V putIfAbsent(Object Key, Object Value) | 지정된 Key의 값이 HashMap에 없을 경우 추가, Value를 반환 |
V compute(K key,BiFunction<? super K, ? super V, ? extends V> remappingFunction) | 지정된 Key의 값에 따라 Value를 어떻게 연산할지 정의, Value(리턴 값)을 반환 |
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) | 지정된 Key의 값이 HashMap에 없을 경우 Function의 리턴 값을 Value로 설정하고 추가, Value(리턴 값)을 반환 |
V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction | 지정된 Key의 값이 HashMap에 있을 경우 Function의 리턴 값을 Value로 변경, Value(리턴 값)을 반환 |
Reference
[Java] 해시맵(HashMap) 자료구조 정리
해시맵은 이름 그대로 해싱(Hashing)된 맵(Map)이다. 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보인다.
velog.io
https://rian-yeji.github.io/algorithm/2019/07/09/algorithm-hashmap-basic.html
YeJi's Blog
Nice to meet you. I'm a study developer. This is a space for organizing what I studied.
rian-yeji.github.io
'Algorithm & 자료구조 > 자료구조' 카테고리의 다른 글
Heap (3) | 2023.10.21 |
---|---|
Linked List (0) | 2023.10.20 |
선형 자료구조 - 배열(Array) (4) | 2023.10.18 |
Queue (2) | 2023.10.17 |
Stack (1) | 2023.10.16 |