본문 바로가기

카테고리 없음

자바 TreeMap을 활용한 사용법과 예제 총정리: 효율적인 자료 정렬과 탐색을 위한 TreeMap의 활용 방법과 예시를 알아보자

1. 자바 TreeMap이란?

자바 TreeMap은 자바 컬렉션 프레임워크에서 제공하는 클래스로, 효율적인 자료 정렬과 탐색을 위해 사용되는 자료구조입니다. TreeMap은 이진 검색 트리의 형태로 데이터를 저장하며, 키(Key)와 값(Value)의 쌍으로 이루어진 엔트리(Entry)들을 유지합니다. 키는 중복될 수 없고, 작은 값부터 큰 값으로 오름차순으로 정렬됩니다.

TreeMap은 내부적으로 레드-블랙 트리(Red-Black Tree)라는 균형 잡힌 이진 검색 트리를 구현하여 데이터를 저장하고 관리합니다. 이러한 구조는 데이터의 삽입, 삭제, 검색 등의 작업을 평균적으로 O(logN)의 시간 복잡도로 수행할 수 있어 매우 효율적입니다.

TreeMap은 키(Key)를 기준으로 데이터를 정렬하고 탐색하는데 유용하며, 특히 정렬된 맵의 부분집합을 찾거나 범위 검색에 효과적입니다. 또한, TreeMap은 네비게이션 메소드를 제공하여 다양한 검색 및 탐색 작업을 수행할 수 있습니다.

자바 TreeMap은 SortedMap 인터페이스를 구현하고 있어서, SortedMap의 메소드뿐만 아니라 TreeMap 고유의 기능을 사용할 수 있습니다. 이러한 특징들로 인해 자바 TreeMap은 데이터의 정렬과 탐색에 효율적으로 사용될 수 있는 자료구조입니다.

2. TreeMap의 특징

  • 자동 정렬 : TreeMap은 키(Key)를 기준으로 데이터를 정렬하여 저장합니다. 중복된 키는 허용되지 않으며, 작은 값에서 큰 값으로 오름차순으로 정렬됩니다. 정렬된 맵의 부분집합을 찾거나 범위 검색 등 많은 탐색 작업에 효과적입니다.

  • 균형 이진 검색 트리 : TreeMap은 내부적으로 레드-블랙 트리(Red-Black Tree)라는 균형 잡힌 이진 검색 트리를 구현하여 데이터를 저장하고 관리합니다. 이로 인해 데이터의 삽입, 삭제, 검색 등의 작업을 평균적으로 O(logN)의 시간 복잡도로 수행할 수 있어 매우 효율적입니다.

  • 네비게이션 메소드 제공 : TreeMap은 첫 번째, 마지막 엔트리, 이전 키, 다음 키 등과 같은 네비게이션 메소드를 제공하여 다양한 검색 및 탐색 작업을 수행할 수 있습니다.

  • SortedMap 인터페이스 구현 : TreeMap은 SortedMap 인터페이스를 구현하고 있어서 SortedMap의 메소드뿐만 아니라 TreeMap 고유의 기능을 사용할 수 있습니다. SortedMap의 메소드를 통해 키의 범위 검색, 정렬된 맵의 서브맵을 생성하는 등의 작업도 가능합니다.

  • 동기화 지원하지 않음 : TreeMap은 동기화를 지원하지 않습니다. 따라서, 멀티 스레드 환경에서 동시에 TreeMap을 변경하거나 동시에 접근하는 경우에는 외부에서 동기화 처리를 해주어야 합니다. 만약 동기화가 필요한 경우에는 Collections 클래스의 synchronizedSortedMap 메소드를 사용하여 동기화된 TreeMap을 생성할 수 있습니다.

  • Null 요소 처리 불가 : TreeMap은 Null 값을 가진 요소를 허용하지 않습니다. Null 값을 가진 키 또는 값을 TreeMap에 넣으려고 하면 NullPointerException이 발생합니다. TreeMap에서는 키 비교에 사용하는 Comparator 또는 키의 natural ordering에 의해 Null이 처리되지 않기 때문입니다.

    3. TreeMap 활용 방법과 예제

TreeMap 활용 방법

TreeMap은 자료 정렬과 탐색에 효율적으로 사용될 수 있는 자료구조로, 다음과 같은 상황에서 활용될 수 있습니다.

  • 데이터의 정렬된 순서로 관리해야 할 때
  • 정렬된 맵의 부분집합을 찾거나 범위 검색할 때
  • 이전 키, 다음 키를 찾거나 특정 키의 앞 뒤를 탐색해야 할 때
  • 정렬된 순서로 데이터를 출력하거나 처리해야 할 때

TreeMap 예제

아래는 TreeMap의 활용 예제 코드입니다.

import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        // TreeMap 생성
        TreeMap<Integer, String> treeMap = new TreeMap<>();

        // 데이터 추가
        treeMap.put(3, "Apple");
        treeMap.put(1, "Banana");
        treeMap.put(4, "Cherry");
        treeMap.put(2, "Durian");

        // 데이터 출력
        System.out.println(treeMap); // {1=Banana, 2=Durian, 3=Apple, 4=Cherry}

        // 첫 번째 키, 마지막 키 출력
        System.out.println("First Key: " + treeMap.firstKey()); // 1
        System.out.println("Last Key: " + treeMap.lastKey()); // 4

        // 키 값으로 데이터 출력
        System.out.println(treeMap.get(2)); // Durian

        // TreeMap 키 순서대로 출력
        for (Integer key : treeMap.keySet()) {
            System.out.println(key + ": " + treeMap.get(key));
        }
    }
}

위 예제에서는 TreeMap을 생성하고, put() 메소드를 사용하여 데이터를 추가하였습니다. TreeMap은 키(Key)를 기준으로 데이터가 정렬되기 때문에 데이터가 순서대로 출력됩니다. 또한, firstKey() 메소드와 lastKey() 메소드를 사용하여 첫 번째 키와 마지막 키를 출력하였고, get() 메소드를 사용하여 특정 키에 해당하는 값을 출력하였습니다. 마지막으로, keySet() 메소드를 사용하여 TreeMap의 키를 순서대로 출력하고, get() 메소드를 사용하여 해당 키의 값을 출력하였습니다. 출력 결과는 다음과 같습니다.

{1=Banana, 2=Durian, 3=Apple, 4=Cherry}
First Key: 1
Last Key: 4
Durian
1: Banana
2: Durian
3: Apple
4: Cherry

위와 같이 TreeMap을 활용하면 데이터의 정렬된 순서로 관리하고, 다양한 검색 및 탐색 기능을 사용할 수 있습니다.