Java

[Java]HashMap 사용법

codi-3 2024. 7. 31. 19:58

🗺️HashMap

  • 컬렉션의 타입 중 하나로 데이터들을 키(Key)와 값(Value)을 짝을 이루어 저장하는 자료구죠이다.
  • 키는 유일해야 하며(중복이 불가능하다) 각 키는 하나의 값과 연관된다 (값은 중복이 가능하다).
  • HashMap은 해시 함수를 사용하여 키를 해시 값으로 변환하고, 이 해시 값을 기반으로 내부 배열에서 값을 저장할 위치를 결정한다
  • 특징은 검색이 다른 자료구죠 보다 빠르다!

⚒️생성방법

(1) HashMap<String, String> h1 = new HashMap<String, String>( );         // 기본설정값 capacity:16, load factor:0.75
(2) HashMap<String, String> h2 = new HashMap<String, String>(30);       // capacity:30으로 설정
(3) HashMap<String, String> h3 = new HashMap<String, String>(25, 0.5); // capacity:25, load factor:0.5로 설정
(4) HashMap<String, String> h4 = new HashMap<String, String>(h3);      // 다른 Map(h3)의 데이터로 h4를 초기화

 

Capacity: 내부 배열의 현재 크기를 나타낸다. 이는 해시맵이 특정 크기에 도달하면 재해시(resizing)를 수행하는 기준이 된다

 

Load Factor: 해시맵의 성능과 메모리 사용량을 조절하는 중요한 매개 변수입니다. 로드 팩터는 해시맵이 얼마나 채워질 수 있는지를 나타내며, 일반적으로 배열이 재해시(resizing)를 수행해야 하는 시점을 결정한다

 

Resizing: 재해시는 해시맵의 Capacity를 증가시키는 과정입니다. 일반적으로 Capacity는 두 배로 증가한다.

 

위 예시의 3번을 풀이하면 Capacity 25 크기의 HashMap이 50% 채워졌을 시 재해시(Resizing)를 수행하여 Capacity를 50으로 늘려준다.


🔡HashMap 메서드

1.HashMap 데이터 추가

1.HashMapName.put(K key, V value) : key와 value값를 지정된 HashMap에 저장합니다. 
2.void putAll(Map<? extends K, ? extends V> m) : Map m의 데이터를 전부 저장합니다. 
3.HashMapName.putIfAbsent(K key, V value) : 기존 데이터에 key값이 저장되어있지 않다면 key와 value를 저장합니다.

 

2.HashMap 데이터 삭제

1.HashMapName.clear( ) : 지정된 HashMap이 가지고있는 모든 데이터를 삭제합니다. 
2.HashMapName.remove(Object key) : 지정한 key값과 일치하는 기존 데이터(key & value)를 삭제합니다. 
3.boolean remove(Object key, Object value) :  주어진 키와 값이 모두 일치하는 경우에만 해당 엔트리를 제거하고, 제거 성공 여부를 boolean 값으로 반환한다.

import java.util.HashMap;

public class HashMapRemoveExample {
    public static void main(String[] args) {
        // HashMap 생성 및 값 삽입
        HashMap<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("orange", 3);

        // 키 "banana"와 값 2가 일치하는 경우 제거
        boolean isRemoved = map.remove("banana", 2);
        System.out.println("Is entry removed: " + isRemoved); // 출력: Is entry removed: true

        // 일치하지 않는 키-값 쌍 제거 시도
        boolean isNotRemoved = map.remove("orange", 5);
        System.out.println("Is entry removed: " + isNotRemoved); // 출력: Is entry removed: false

        // 해시맵 출력
        System.out.println("Updated map: " + map); // 출력: Updated map: {apple=1, orange=3}
    }
}

 

3. 데이터 수정

1.HashMapName.replace(K key, V value) : key값과 일치하는 기존 데이터의 value값을 주어진 새로운 value값으로 변경한다. 
2.HashMapName.replace(K key, V oldValue, V newValue) : key와 oldValue가 동시에 일치하는 데이터의 value값을 newValue로 변경한다.

 

4. 데이터 확인

1.boolean HashMapName.containsKey(Object key) : key와 일치하는 데이터가 있는지 여부를 확인한다. (있으면 true)
2.boolean HashMapName.containsValue(Object value) : value와 일치하는 데이터가 있는지 여부를 확인한다. (있으면 true)
3.boolean HashMapName.isEmpty( ) : 데이터가 빈 상태인지 여부를 확인한다. (빈 상태면 true)
4.int HashMapName.size( ) : HashMap의 사이즈, key-value 맵핑 데이터의 개수를 반환한다다.

 

5. 데이터 반환

1.HashMapName.get(Object key) : key와 맵핑된 value값을 반환한다. 
2.HashMapName.getOrDefault(Object key, V defaultValue) : key와 맵핑된 value값이 존제한다면 값을 반환하고 없으면 defaultValue로 입력해준 값을 반환한다.
3.Set<Map.Entry<K, V>> entrySet( ) : 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환한다. 
4.Set<K> keySet( ) : 모든 key 값을 가진 Set 데이터를 반환한다. 
5.Collection<V> values( ) : 모든 value 값을 가진 Collection 데이터를 반환한다.

해쉬맵은 데이터 탐색을 사용할 때 효율적이고 빠른 속도로 사용이 가능하니 위개념 들을 잘 이해하면 더 효율적인 코드를 작성할 수 있을 거 같다.