본문 바로가기

JAVA

[Java] Map 자료구조와 Map 인터페이스란?

1.  Map 자료 구조

Map은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조이다. 배열이나 List처럼 순서(index)로 접근하는 것이 아니라, 고유한 키를 이용해서 값을 찾을 수 있다.

 


 

2. Map 인터페이스

import java.util.Map;

Java.util 패키지에 Map 인터페이스가 포함되어 있어서 import 하면 된다.

 

 

1. 객체 생성

Map<String, Integer> map = new Map<>(); // ❌ 불가능

Map<String, Integer> map1 = new HashMap<>(); // ✅ 가능
Map<String, Integer> map2 = new TreeMap<>(); // ✅ 가능
Map<String, Integer> map3 = new LinkedHashMap<>(); // ✅ 가능
  • Java에서 제공하는 Map 인터페이스(Map<k, v>)는 객체를 직접 생성 ❌.
    (추가 정보 확인 : https://kimyongjun0129.tistory.com/98)
  • 따라서 HashMap, TreeMap, LinkedHashMap 등의 구현체(클래스)를 사용해야 한다.
  • 위 코드에서 처럼 작성하는 이유 :
    1. 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
    2. 다형성(Polymorphism) 활용 : 구현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다. 

 

 

import java.util.HashMap;
import java.util.TreeMap;
import java.util.LinkedHashMap;

다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.

 

 

2. 특징

Map<String, String> map = new HashMap<>();

map.put("바나나":"과일");
map.put("사과":"과일");
map.put("오렌지":"과일");

키-값(key-value) 형태로 저장: 키는 중복 ❌, 값은 중복 가능 ✅

 

 

3. Map 주요 메서드

메서드 설명
put(K key, V value) 키-값 쌍 추가 (기존 키가 있으면 값 변경)
get(K key) 키에 해당하는 값 가져오기 (없으면 null 반환)
containsKey(K key) 특정 키가 존재하는지 확인
containsValue(V value) 특정 값이 존재하는지 확인
remove(K key) 특정 키 삭제
size() Map에 저장된 키-값 쌍 개수 반환
keySet() 모든 키를 Set 형태로 반환
values() 모든 값을 Collection 형태로 반환
entrySet() 모든 키-값 쌍을 Set<Map.Entry<K, V>> 형태로 반환

Map의 주요 메서드는 Map 인터페이스에 정의된 것들이라 모든 Map 구현체(HashMap, TreeMap, LinkedHashMap 등)에서 사용 가능 ✅

 

만약, 공통된 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면

HashMap<String, Integer> map = new HashMap<>();

다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.

 

 

 

4. 사용 예제

더보기
import java.util.Map;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        // HashMap 생성: <키 타입, 값 타입>
        HashMap<String, Integer> scores = new HashMap<>();

        // 데이터 추가
        scores.put("철수", 85);
        scores.put("영희", 92);
        scores.put("민수", 78);

        // 값 가져오기
        System.out.println(scores.get("영희")); // 92

        // 키 존재 여부 확인
        System.out.println(scores.containsKey("민수")); // true

        // 값 수정
        scores.put("민수", 88);

        // 삭제
        scores.remove("철수");

        // 전체 출력
        for (String name : scores.keySet()) {
            System.out.println(name + "의 점수: " + scores.get(name));
        }
    }
}