자료구조

TreeMap - Java

Stitchhhh 2025. 5. 1. 12:38

TreeMap

  • TreeMap은 Java의 Map 인터페이스를 구현한 클래스 중 하나로, 키를 자동으로 정렬하며 내부적으로 **Red-Black Tree(이진 탐색 트리)**를 사용합니다.
  • 범위 검색이나 정렬 기반의 탐색에 적합합니다.

주요 특징

자료구조 레드-블랙 트리 (Red-Black Tree)
정렬 여부 ✅ 자동 정렬 (Key 기준 오름차순)
삽입 순서 유지 ❌ (정렬 순서대로 유지됨)
null 허용 ❌ Key는 허용 X, Value는 허용 O
시간 복잡도 O(log n)
특징 Key 정렬, 범위 탐색, ceiling, floor 등 사용 가능

대표 메서드

package structure.map.treemap;

import java.util.Map;
import java.util.TreeMap;

public class TreeMapClass {

    private final TreeMap<Integer, String> treeMap;

    public TreeMapClass(TreeMap<Integer, String> treeMap) {
        this.treeMap = treeMap;
    }

    // 맵에 키-값 쌍을 추가하거나 업데이트합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public TreeMap<Integer, String> put(int key, String value) {
        this.treeMap.put(key, value);
        return this.treeMap;
    }

    // 지정된 키에 해당하는 값을 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public String get(int key) {
        return this.treeMap.get(key);
    }

    // 지정된 키에 해당하는 항목을 제거합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public TreeMap<Integer, String> remove(int key) {
        this.treeMap.remove(key);
        return this.treeMap;
    }

    // 맵에 지정된 키가 포함되어 있는지 확인합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public boolean containsKey(int key) {
        return this.treeMap.containsKey(key);
    }

    // 맵에 지정된 값이 포함되어 있는지 확인합니다.
    // 시간 복잡도: O(n)
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public boolean containsValue(String value) {
        return this.treeMap.containsValue(value);
    }

    // 맵의 모든 요소를 제거합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public void clear() {
        this.treeMap.clear();
    }

    // 맵이 비어 있는지 확인합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public boolean isEmpty() {
        return this.treeMap.isEmpty();
    }

    // 맵의 요소 개수를 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public int size() {
        return this.treeMap.size();
    }

    // 가장 작은 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NoSuchElementException - 맵이 비어 있는 경우
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public Map.Entry<Integer, String> firstEntry() {
        return this.treeMap.firstEntry();
    }

    // 가장 큰 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NoSuchElementException - 맵이 비어 있는 경우
    // 예외 발생: NullPointerException - treeMap이 null인 경우
    public Map.Entry<Integer, String> lastEntry() {
        return this.treeMap.lastEntry();
    }

    // 지정된 키보다 작은 키 중 가장 큰 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public Map.Entry<Integer, String> lowerEntry(int key) {
        return this.treeMap.lowerEntry(key);
    }

    // 지정된 키보다 큰 키 중 가장 작은 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public Map.Entry<Integer, String> higherEntry(int key) {
        return this.treeMap.higherEntry(key);
    }

    // 지정된 키 이하의 키 중 가장 큰 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public Map.Entry<Integer, String> floorEntry(int key) {
        return this.treeMap.floorEntry(key);
    }

    // 지정된 키 이상의 키 중 가장 작은 키에 해당하는 엔트리를 반환합니다.
    // 시간 복잡도: O(log n)
    // 예외 발생: NullPointerException - treeMap이 null이거나 key가 null인 경우
    public Map.Entry<Integer, String> ceilingEntry(int key) {
        return this.treeMap.ceilingEntry(key);
    }
}

'자료구조' 카테고리의 다른 글

HashMap vs TreeMap vs LinkedHashMap  (16) 2025.05.01
LinkedHashMap - Java  (2) 2025.05.01
HashMap - Java  (2) 2025.05.01
TreeSet vs HashSet vs LinkedHashSet  (10) 2025.04.30
LinkedHashSet - Java  (0) 2025.04.30