Java Map 자료구조

CosmoNumb·2024년 8월 1일
0

java

목록 보기
14/24

자바의 Map 자료구조는 키-값 쌍(Key-Value Pair)을 저장하는 컬렉션입니다. 각 키는 고유하며, 하나의 키는 하나의 값과 매핑됩니다. Map 인터페이스는 자바에서 가장 많이 사용되는 자료구조 중 하나입니다.

주요 구현 클래스

  • HashMap: 가장 많이 사용되는 Map 구현 클래스입니다. 해싱을 사용하여 키-값 쌍을 저장하며, 평균적으로 O(1)의 시간 복잡도를 가집니다.
  • LinkedHashMap: HashMap과 유사하지만, 삽입 순서를 유지합니다.
  • TreeMap: 키를 정렬된 순서로 유지합니다. 내부적으로 Red-Black Tree를 사용하여 키를 정렬하며, O(log n)의 시간 복잡도를 가집니다.
  • Hashtable: HashMap과 유사하지만, 동기화되어 있어 스레드 안전합니다.

Map 인터페이스의 주요 메서드

  1. put(K key, V value):

    • 주어진 키와 값을 맵에 추가합니다. 만약 키가 이미 존재하면 해당 키의 값을 새로운 값으로 덮어씁니다.
    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 1);
    map.put("banana", 2);
  2. get(Object key):

    • 주어진 키에 매핑된 값을 반환합니다. 만약 키가 존재하지 않으면 null을 반환합니다.
    Integer value = map.get("apple"); // 1
  3. remove(Object key):

    • 주어진 키에 매핑된 키-값 쌍을 맵에서 제거합니다.
    map.remove("banana");
  4. containsKey(Object key):

    • 주어진 키가 맵에 존재하는지 여부를 반환합니다.
    boolean hasApple = map.containsKey("apple"); // true
  5. containsValue(Object value):

    • 주어진 값이 맵에 존재하는지 여부를 반환합니다.
    boolean hasValue1 = map.containsValue(1); // true
  6. keySet():

    • 맵의 모든 키를 포함하는 Set을 반환합니다.
    Set<String> keys = map.keySet();
  7. values():

    • 맵의 모든 값을 포함하는 Collection을 반환합니다.
    Collection<Integer> values = map.values();
  8. entrySet():

    • 맵의 모든 키-값 쌍을 포함하는 Set<Map.Entry<K, V>>를 반환합니다.
    Set<Map.Entry<String, Integer>> entries = map.entrySet();

Map 사용 예시

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

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

        // 요소 추가
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        // 요소 접근
        Integer appleValue = map.get("apple");
        System.out.println("apple: " + appleValue); // apple: 1

        // 요소 제거
        map.remove("banana");

        // 키 존재 여부 확인
        boolean hasCherry = map.containsKey("cherry");
        System.out.println("Has cherry: " + hasCherry); // Has cherry: true

        // 값 존재 여부 확인
        boolean hasValue2 = map.containsValue(2);
        System.out.println("Has value 2: " + hasValue2); // Has value 2: false

        // 모든 키 출력
        for (String key : map.keySet()) {
            System.out.println("Key: " + key);
        }

        // 모든 값 출력
        for (Integer value : map.values()) {
            System.out.println("Value: " + value);
        }

        // 모든 키-값 쌍 출력
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

주요 특징

  • 키-값 쌍 저장: Map은 키와 값을 쌍으로 저장합니다.
  • 키의 고유성: 각 키는 고유해야 하며, 중복된 키는 허용되지 않습니다.
  • 값의 중복 허용: 값은 중복될 수 있습니다.
  • Null 허용 여부: HashMapLinkedHashMapnull 키와 값을 허용하지만, Hashtable은 허용하지 않습니다.
  • 순서 보장 여부: HashMap은 순서를 보장하지 않지만, LinkedHashMap은 삽입 순서를, TreeMap은 키의 정렬 순서를 보장합니다.

이러한 특징과 메서드를 통해 Map은 다양한 상황에서 효율적으로 데이터를 저장하고 조회할 수 있는 자료구조입니다.

0개의 댓글