Angry Stock 2023. 11. 28. 16:04
반응형

Java의 **HashMap**은 키-값 쌍을 저장하는 맵(map) 구현입니다. **HashMap**은 Map 인터페이스를 구현하며, 키와 값은 모두 객체입니다. 각 키는 고유해야 하며, 각 키는 하나의 값을 가집니다. **HashMap**은 해시 테이블을 사용하여 내부 데이터를 저장하며, 이는 대부분의 경우에 빠른 검색, 삽입, 삭제 연산을 가능하게 합니다.

HashMap의 주요 특징

  • 키의 고유성: 같은 키로 여러 값을 저장하려고 하면, 마지막에 저장된 값으로 덮어씁니다.
  • 순서 보장 없음: **HashMap**은 요소의 순서를 보장하지 않습니다.
  • null 값: **HashMap**은 키와 값으로 **null**을 허용합니다.
  • 동기화되지 않음: **HashMap**은 멀티스레드 환경에서 동기화를 보장하지 않습니다. 동기화가 필요한 경우 **Collections.synchronizedMap()**을 사용할 수 있습니다.

HashMap 사용 예제

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        // HashMap 생성
        Map<String, Integer> map = new HashMap<>();

        // 요소 추가
        map.put("사과", 10);
        map.put("바나나", 3);
        map.put("체리", 5);

        // 특정 키의 값 가져오기
        int bananaCount = map.get("바나나");
        System.out.println("바나나 수: " + bananaCount);

        // 모든 요소 순회
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }

        // 특정 키의 요소 삭제
        map.remove("체리");

        // 키 존재 여부 확인
        if (map.containsKey("사과")) {
            System.out.println("사과가 있습니다.");
        }

        // 값 존재 여부 확인
        if (map.containsValue(10)) {
            System.out.println("값 10이 있습니다.");
        }
    }
}

밑의 코드 경우의 Map & HashMap의 차이점

HashMap<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<String, Object>();
  • 첫번재 코드의 경우 map Object는 오직 HashMap에 대한 Object만을 담을 수 있어서 유지 보수성이 떨어진다.
  • 두번째 코드의 경우 Map 인터페이스를 사용해서 다른 종류의 Map을 사용해야 하는 상황이 발생할 때 코드 수정필요 없이 손쉽게 이를 방영.

주요 메소드

  1. put(Key, Value): 키(Key)와 값을(Value) 매핑하여 해시맵에 추가합니다. 이미 해당 키가 존재하면 기존 값을 새 값으로 대체합니다.
  2. get(Object key): 지정된 키에 매핑된 값을 반환합니다. 키가 맵에 없는 경우 null을 반환합니다.
  3. remove(Object key): 지정된 키가 매핑된 항목을 해시맵에서 제거합니다. 해당 키가 맵에 있으면 해당 키와 값이 제거되고, 값이 반환됩니다.
  4. containsKey(Object key): 맵이 지정된 키를 포함하고 있는지 여부를 확인합니다. 포함하고 있으면 true, 그렇지 않으면 false를 반환합니다.
  5. containsValue(Object value): 맵이 지정된 값을 포함하고 있는지 여부를 확인합니다. 포함하고 있으면 true, 그렇지 않으면 false를 반환합니다.
  6. size(): 맵에 있는 키-값 쌍의 개수를 반환합니다.
  7. isEmpty(): 맵이 비어 있는지 여부를 확인합니다. 비어 있으면 true, 그렇지 않으면 false를 반환합니다.
  8. clear(): 맵에서 모든 매핑을 제거합니다.
  9. keySet(): 맵의 키 집합을 반환합니다. 이 집합은 맵의 뷰이므로, 맵의 변경이 이 집합에 반영됩니다.
  10. values(): 맵의 값 컬렉션을 반환합니다. 이 컬렉션은 맵의 뷰이므로, 맵의 변경이 이 컬렉션에 반영됩니다.
  11. entrySet(): 맵의 키-값 쌍을 포함하는 집합을 반환합니다. 이 집합은 맵의 뷰이므로, 맵의 변경이 이 집합에 반영됩니다.
반응형