본문 바로가기

카테고리 없음

자바 TreeMap의 활용 방법과 예시: 효율적인 정렬과 탐색을 위한 TreeMap

자바 TreeMap을 활용한 효율적인 정렬과 탐색

TreeMap이란?

TreeMap의 개념

TreeMap은 자바 컬렉션 프레임워크의 일부로, Map 인터페이스를 구현한 클래스입니다. TreeMap은 이진 검색 트리의 형태로 데이터를 저장하며, 기본적으로 키(key)를 기준으로 정렬됩니다.

TreeMap의 특징

  1. 정렬된 순서로 데이터를 저장하고 탐색할 수 있습니다.
  2. 모든 연산의 시간 복잡도는 O(logN)이며, 균형 이진 트리를 유지하기 위해 AVL 트리 혹은 레드-블랙 트리를 사용합니다.
  3. 동일한 키를 갖는 데이터는 허용되지 않으며, 중복된 값은 허용됩니다.
  4. 키와 값은 일대일로 매핑되어 저장되며, 키를 통해 값을 검색하거나 삭제할 수 있습니다.

TreeMap의 활용 방법

정렬된 데이터의 저장과 탐색

TreeMap에 데이터 저장하기
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");
    }
}

위의 예시에서 TreeMap을 사용하여 학생들의 학번과 이름을 매핑하여 저장하였습니다. TreeMap은 정렬 기능을 내재하고 있기 때문에 키를 기준으로 데이터가 정렬되어 저장됩니다.

정렬된 데이터 탐색하기
import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 오름차순으로 키의 순서대로 출력
        for (Map.Entry<Integer, String> entry : studentMap.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }

        // 특정 키를 기준으로 값 출력
        System.out.println(studentMap.get(20171002)); // Amy
    }
}

위의 예시에서는 TreeMap의 entrySet() 메소드를 통해 키와 값을 쌍으로 가져와서 오름차순으로 출력하였습니다. 또한, get() 메소드를 사용하여 특정 키를 기준으로 값을 가져올 수도 있습니다.

범위 검색

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

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 20171002부터 20171003까지 범위 검색
        Map<Integer, String> rangeMap = studentMap.subMap(20171002, true, 20171003, true);
        for (Map.Entry<Integer, String> entry : rangeMap.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

위의 예시에서는 subMap() 메소드를 사용하여 특정 범위의 데이터를 검색하였습니다. subMap의 첫 번째 인자는 범위의 시작 키, 두 번째 인자는 시작 키의 포함 여부, 세 번째 인자는 범위의 종료 키, 네 번째 인자는 종료 키의 포함 여부를 나타냅니다.

데이터의 삭제 및 수정

import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 데이터 삭제
        studentMap.remove(20171002);

        // 데이터 수정
        studentMap.put(20171003, "Michael");
    }
}

위의 예시에서는 remove() 메소드를 사용하여 특정 키를 가지는 데이터를 삭제하였습니다. 또한, put() 메소드를 사용하여 이미 존재하는 키에 새로운 값을 할당하여 데이터를 수정할 수도 있습니다.

TreeMap을 활용한 예시

학생 성적 관리 시스템

학생들의 성적을 저장하고 관리하는 시스템을 만들 때, TreeMap을 활용하여 학번을 키로, 성적을 값으로 매핑하여 저장하면 학번의 오름차순으로 정렬된 상태로 데이터를 유지할 수 있습니다. 이를 통해 특정 학번의 성적을 빠르게 검색하거나 범위 검색을 통해 성적이 특정 범위에 속하는 학생들을 쉽게 찾을 수 있습니다.

주소록 관리 시스템

사용자의 이름과 전화번호를 저장하고 관리하는 주소록 시스템을 만들 때, TreeMap을 활용하여 이름을 키로, 전화번호를 값으로 매핑하여 저장하면 이름의 알파벳 순서에 따라 데이터가 정렬되어 유지됩니다. 이를 통해 특정 이름의 전화번호를 빠르게 검색할 수 있으며, 범위 검색을 통해 특정 알파벳 범위에 해당하는 이름들을 쉽게 찾을 수 있습니다.

영화 예매 시스템

영화 예매 시스템에서 상영 시간을 키로, 예매한 인원 수를 값으로 매핑하여 저장하고 관리할 때, TreeMap을 활용하면 상영 시간의 오름차순으로 예매 정보가 정렬되어 유지됩니다. 이를 통해 특정 시간에 예매한 인원 수를 빠르게 검색하거나, 범위 검색을 통해 특정 시간대의 예매 정보를 쉽게 찾을 수 있습니다.

자바 TreeMap을 활용한 효율적인 정렬과 탐색

TreeMap이란?

TreeMap의 개념

TreeMap은 자바 컬렉션 프레임워크의 일부로, Map 인터페이스를 구현한 클래스입니다. TreeMap은 이진 검색 트리의 형태로 데이터를 저장하며, 기본적으로 키(key)를 기준으로 정렬됩니다.

TreeMap의 특징

  1. 정렬된 순서로 데이터를 저장하고 탐색할 수 있습니다.
  2. 모든 연산의 시간 복잡도는 O(logN)이며, 균형 이진 트리를 유지하기 위해 AVL 트리 혹은 레드-블랙 트리를 사용합니다.
  3. 동일한 키를 갖는 데이터는 허용되지 않으며, 중복된 값은 허용됩니다.
  4. 키와 값은 일대일로 매핑되어 저장되며, 키를 통해 값을 검색하거나 삭제할 수 있습니다.

TreeMap의 활용 방법

정렬된 데이터의 저장과 탐색

TreeMap에 데이터 저장하기
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");
    }
}

위의 예시에서는 TreeMap을 사용하여 학생들의 학번과 이름을 매핑하여 저장하였습니다. TreeMap은 정렬 기능을 내재하고 있기 때문에 키를 기준으로 데이터가 정렬되어 저장됩니다.

정렬된 데이터 탐색하기
import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 오름차순으로 키의 순서대로 출력
        for (Map.Entry<Integer, String> entry : studentMap.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }

        // 특정 키를 기준으로 값 출력
        System.out.println(studentMap.get(20171002)); // Amy
    }
}

위의 예시에서는 TreeMap의 entrySet() 메소드를 통해 키와 값을 쌍으로 가져와서 오름차순으로 출력하였습니다. 또한, get() 메소드를 사용하여 특정 키를 기준으로 값을 가져올 수도 있습니다.

범위 검색

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

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 20171002부터 20171003까지 범위 검색
        Map<Integer, String> rangeMap = studentMap.subMap(20171002, true, 20171003, true);
        for (Map.Entry<Integer, String> entry : rangeMap.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

위의 예시에서는 subMap() 메소드를 사용하여 특정 범위의 데이터를 검색하였습니다. subMap의 첫 번째 인자는 범위의 시작 키, 두 번째 인자는 시작 키의 포함 여부, 세 번째 인자는 범위의 종료 키, 네 번째 인자는 종료 키의 포함 여부를 나타냅니다.

데이터의 삭제 및 수정

import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> studentMap = new TreeMap<>();
        studentMap.put(20171001, "John");
        studentMap.put(20171002, "Amy");
        studentMap.put(20171003, "Mike");
        studentMap.put(20171004, "Emily");

        // 데이터 삭제
        studentMap.remove(20171002);

        // 데이터 수정
        studentMap.put(20171003, "Michael");
    }
}

위의 예시에서는 remove() 메소드를 사용하여 특정 키를 가지는 데이터를 삭제하였습니다. 또한, put() 메소드를 사용하여 이미 존재하는 키에 새로운 값을 할당하여 데이터를 수정할 수도 있습니다.

TreeMap을 활용한 예시

학생 성적 관리 시스템

학생들의 성적을 저장하고 관리하는 시스템을 만들 때, TreeMap을 활용하여 학번을 키로, 성적을 값으로 매핑하여 저장하면 학번의 오름차순으로 정렬된 상태로 데이터를 유지할 수 있습니다. 이를 통해 특정 학번의 성적을 빠르게 검색하거나 범위 검색을 통해 성적이 특정 범위에 속하는 학생들을 쉽게 찾을 수 있습니다.

주소록 관리 시스템

사용자의 이름과 전화번호를 저장하고 관리하는 주소록 시스템을 만들 때, TreeMap을 활용하여 이름을 키로, 전화번호를 값으로 매핑하여 저장하면 이름의 알파벳 순서에 따라 데이터가 정렬되어 유지됩니다. 이를 통해 특정 이름의 전화번호를 빠르게 검색할 수 있으며, 범위 검색을 통해 특정 알파벳 범위에 해당하는 이름들을 쉽게 찾을 수 있습니다.

영화 예매 시스템

영화 예매 시스템에서 상영 시간을 키로, 예매한 인원 수를 값으로 매핑하여 저장하고 관리할 때, TreeMap을 활용하면 상영 시간의 오름차순으로 예매 정보가 정렬되어 유지됩니다. 이를 통해 특정 시간에 예매한 인원 수를 빠르게 검색하거나, 범위 검색을 통해 특정 시간대의 예매 정보를 쉽게 찾을 수 있습니다.

1. TreeMap이란?

TreeMap은 자바 컬렉션 프레임워크의 일부로, Map 인터페이스를 구현한 클래스입니다. TreeMap은 이진 검색 트리의 형태로 데이터를 저장하며, 기본적으로 키(key)를 기준으로 정렬됩니다. 이로 인해 데이터의 검색과 정렬에 효과적으로 사용할 수 있습니다.

TreeMap은 데이터를 저장하는 방식으로 이진 검색 트리를 사용합니다. 이진 검색 트리는 노드들이 키를 기준으로 정렬되어 있는 트리 구조를 가지며, 왼쪽 서브트리의 모든 노드의 키는 현재 노드의 키보다 작고, 오른쪽 서브트리의 모든 노드의 키는 현재 노드의 키보다 큽니다. 이진 검색 트리를 이용하면 데이터의 삽입, 삭제, 탐색 연산에 O(logN)의 시간 복잡도를 가질 수 있습니다.

TreeMap은 정렬된 순서로 데이터를 저장하고 탐색할 수 있는 특징을 가지고 있습니다. 따라서 TreeMap에서는 특정 키를 기준으로 값을 찾거나, 키의 순서대로 데이터를 탐색할 수 있습니다. 또한, TreeMap은 키와 값이 일대일로 매핑되어 저장되므로, 키를 통해 값을 검색하거나 삭제할 수 있습니다.

또한, TreeMap은 균형 이진 트리(Balanced Binary Tree)를 유지하기 위해 AVL 트리나 레드-블랙 트리를

1.1 TreeMap의 개념

TreeMap은 Map 인터페이스를 구현한 자바 컬렉션 클래스의 하나로, 이진 검색 트리(Binary Search Tree)의 형태로 데이터를 저장하고 관리합니다. TreeMap은 키(Key)와 값(Value)을 쌍으로 이루는 데이터를 저장할 수 있으며, 키를 기준으로 데이터가 정렬됩니다.

TreeMap은 데이터를 저장할 때, 키를 기반으로 이진 검색 트리를 구성하며, 이진 검색 트리는 데이터를 효율적으로 검색, 삽입, 삭제하기 위해 사용되는 자료 구조입니다. 이진 검색 트리는 계층적인 이진 트리 구조를 가지며, 각 노드는 키와 값 그리고 왼쪽 자식 노드와 오른쪽 자식 노드를 가리킵니다. 왼쪽 자식 노드의 키는 현재 노드의 키보다 작고, 오른쪽 자식 노드의 키는 현재 노드의 키보다 크기 때문에 효율적인 탐색이 가능합니다.

TreeMap은 기본적으로 키를 기준으로 데이터가 정렬되어 저장됩니다. 정렬은 키의 자연적인 순서인 오름차순으로 수행되며, 사용자가 Comparable 인터페이스를 구현하여 커스텀한 정렬 기준을 지정할 수도 있습니다. 이렇게 정렬된 TreeMap은 특정 키를 기준으로 값을 검색하거나, 정렬된 순서로 값을 탐색하는 데에 효율적입니다.

또한, TreeMap은 중복된 키를 가지는 데이터를 저장하지 않습니다. 따라서 동일한 키를 가지는 데이터는 한번만 저장되며, 중복된 값은 허용됩니다. 이러한 특징 때문에 TreeMap은 정렬과 검색이 요구되는 상황에서 매우 유용하게 사용될 수 있습니다.

1.2 TreeMap의 특징

1. 정렬된 순서로 데이터를 저장: TreeMap은 데이터를 키를 기준으로 정렬된 상태로 저장합니다. 이진 검색 트리의 특성을 이용하여 데이터를 삽입할 때마다 정렬된 위치에 삽입하므로, 데이터의 추가 및 삭제에 대한 정렬 작업이 필요하지 않습니다.

2. 효율적인 검색과 탐색: 이진 검색 트리의 형태로 데이터를 저장하기 때문에, 특정 키를 기준으로 값을 검색하거나 키의 순서대로 데이터를 탐색하는 데에 효율적입니다. 검색 및 탐색 작업은 이진 트리의 특성을 활용하여 O(logN)의 시간 복잡도로 수행됩니다.

3. 중복된 키의 처리: TreeMap은 중복된 키를 가지는 데이터를 저장하지 않습니다. 따라서 동일한 키를 가지는 데이터는 한번만 저장되며, 중복된 값은 허용됩니다.

4. 커스텀한 정렬 기준: TreeMap은 정렬 기준을 사용자가 지정할 수 있습니다. 사용자가 Comparable 인터페이스를 구현하여 커스텀한 정렬 기준을 만들 수 있으며, 이를 활용하여 특정 필드를 기준으로 정렬된 TreeMap을 생성할 수 있습니다.

5. 높은 성능을 위한 균형 이진 트리 유지: TreeMap은 균형 이진 트리를 유지하기 위해 AVL 트리나 레드-블랙 트리와 같은 균형을 맞춘 이진 트리 구조를 사용합니다. 이를 통해 데이터의 삽입, 삭제, 검색 작업에 대해 최악의 경우에도 O(logN)의 시간 복잡도를 유지하여 높은 성능을 제공합니다.

6. 순서 유지 및 하위 맵 추출: TreeMap은 키의 순서를 유지하여 데이터를 저장하므로, 데이터를 순서대로 접근하고 탐색할 수 있습니다. 또한, TreeMap은 특정 범위의 키에 대한 하위 맵을 추출하는 기능을 제공하므로, 필요한 데이터를 선택적으로 추출할 수 있습니다.

7. 자동 정렬 및 변경 알림: TreeMap은 데이터의 추가, 삭제, 정렬 등의 작업을 수행할 때 자동으로 정렬을 유지하며, 변경을 감지하고 알려줍니다. 따라서 정렬된 데이터의 유지와 관련된 작업을 자동화할 수 있습니다.

TreeMap의 특징

TreeMap은 키-값 쌍으로 이루어진 데이터를 저장하고 관리하는 자바 컬렉션 클래스입니다. 이진 검색 트리의 형태로 데이터를 저장하며, 키를 기준으로 데이터가 정렬됩니다.

정렬된 순서로 데이터를 저장

TreeMap은 데이터를 키를 기준으로 정렬된 상태로 저장합니다. 이진 검색 트리의 특성을 이용하여 데이터를 삽입할 때마다 정렬된 위치에 삽입하기 때문에, 데이터의 추가 및 삭제에 대한 정렬 작업이 필요하지 않습니다.

효율적인 검색과 탐색

이진 검색 트리의 형태로 데이터를 저장하여, 특정 키를 기준으로 값을 검색하거나 키의 순서대로 데이터를 탐색하는 데에 효율적입니다. 검색 및 탐색 작업은 이진 트리의 특성을 활용하여 O(logN)의 시간 복잡도로 수행됩니다.

중복된 키의 처리

TreeMap은 중복된 키를 가지는 데이터를 저장하지 않습니다. 따라서 동일한 키를 가지는 데이터는 한 번만 저장되며, 중복된 값은 허용됩니다.

커스텀한 정렬 기준

TreeMap은 정렬 기준을 사용자가 지정할 수 있습니다. 사용자가 Comparable 인터페이스를 구현하여 커스텀한 정렬 기준을 만들 수 있으며, 이를 활용하여 특정 필드를 기준으로 정렬된 TreeMap을 생성할 수 있습니다.

높은 성능을 위한 균형 이진 트리 유지

TreeMap은 균형 이진 트리를 유지하기 위해 AVL 트리나 레드-블랙 트리와 같은 균형을 맞춘 이진 트리 구조를 사용합니다. 이를 통해 데이터의 삽입, 삭제, 검색 작업에 대해 최악의 경우에도 O(logN)의 시간 복잡도를 유지하여 높은 성능을 제공합니다.

순서 유지 및 하위 맵 추출

TreeMap은 키의 순서를 유지하여 데이터를 저장하므로, 데이터를 순서대로 접근하고 탐색할 수 있습니다. 또한, TreeMap은 특정 범위의 키에 대한 하위 맵을 추출하는 기능을 제공하므로, 필요한 데이터를 선택적으로 추출할 수 있습니다.

자동 정렬 및 변경 알림

TreeMap은 데이터의 추가, 삭제, 정렬 등의 작업을 수행할 때 자동으로 정렬을 유지하며, 변경을 감지하고 알려줍니다. 따라서 정렬된 데이터의 유지와 관련된 작업을 자동화할 수 있습니다.

2. TreeMap의 활용 방법

TreeMap은 정렬된 순서로 데이터를 저장하고 효율적인 검색 및 탐색을 제공하는 자바 컬렉션 클래스입니다. TreeMap의 활용 방법에 대해 알아보겠습니다.

데이터의 추가

TreeMap에 데이터를 추가하는 방법은 put() 메서드를 사용합니다. put() 메서드는 키와 값을 인자로 받아 해당 키-값 쌍을 TreeMap에 추가합니다. 이때, TreeMap은 키를 기준으로 자동으로 정렬됩니다.

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "Apple");
treeMap.put(2, "Banana");
treeMap.put(3, "Cherry");

위의 예제에서는 Integer 형식의 키와 String 형식의 값을 가지는 TreeMap을 생성하고, 순서대로 1, 2, 3을 키로 하는 값을 추가하였습니다.

데이터의 조회

TreeMap에서 데이터를 조회하는 방법은 get() 메서드를 사용합니다. get() 메서드는 키를 인자로 받아 해당 키에 대응하는 값을 반환합니다.

String fruit = treeMap.get(2);
System.out.println(fruit); // 출력 결과: Banana

위의 예제에서는 키값 2를 가지는 값을 조회하여 변수 fruit에 저장하고, 출력 결과로 "Banana"가 나옵니다.

데이터의 삭제

TreeMap에서 특정 데이터를 삭제하는 방법은 remove() 메서드를 사용합니다. remove() 메서드는 키를 인자로 받아 해당 키에 해당하는 데이터를 TreeMap에서 삭제합니다.

treeMap.remove(3);

위의 예제에서는 키값 3에 해당하는 데이터를 삭제하였습니다.

정렬된 순서로 데이터 접근

TreeMap은 데이터를 정렬된 순서로 저장하기 때문에, 데이터에 접근할 때도 정렬된 순서대로 접근할 수 있습니다. TreeMap은 keySet() 메서드를 사용하여 키의 집합을 반환하고, entrySet() 메서드를 사용하여 키-값 쌍의 집합을 반환할 수 있습니다.

for (Integer key : treeMap.keySet()) {
    String value = treeMap.get(key);
    System.out.println(key + ": " + value);
}

위의 예제는 TreeMap의 keySet을 순회하면서 해당 키에 대응하는 값을 출력하는 예제입니다.

하위 맵 추출

TreeMap은 특정 범위의 키에 해당하는 하위 맵을 추출하는 기능을 제공합니다. subMap() 메서드를 사용하여 시작 키와 종료 키를 지정하여 해당 범위의 하위 맵을 추출할 수 있습니다.

SortedMap<Integer, String> subMap = treeMap.subMap(1, 3);

위의 예제에서는 키값 1부터 3까지의 범위에 해당하는 하위 맵을 추출하여 변수 subMap에 저장하였습니다.

커스텀한 정렬 기준 사용

TreeMap은 사용자가 Comparable 인터페이스를 구현하여 커스텀한 정렬 기준을 사용할 수 있습니다. 정렬 기준을 구현한 클래스를 생성하여 TreeMap에 인자로 넘기면 해당 정렬 기준에 따라 데이터가 정렬됩니다.

class CustomSorting implements Comparable<CustomSorting> {
    private int value;

    // Getter, Setter, Constructor 등의 코드 생략

    @Override
    public int compareTo(CustomSorting other) {
        return Integer.compare(this.value, other.value);
    }
}

TreeMap<CustomSorting, String> treeMap = new TreeMap<>();
treeMap.put(new CustomSorting(3), "Apple");
treeMap.put(new CustomSorting(1), "Banana");
treeMap.put(new CustomSorting(2), "Cherry");

위의 예제에서는 CustomSorting 클래스를 Comparable 인터페이스를 구현하여 정렬 기준을 만들었습니다. 이후 CustomSorting 객체를 키로 하는 데이터를 TreeMap에 추가하면, value 필드의 값에 따라 데이터가 정렬됩니다.

TreeMap은 이처럼 다양한 방식으로 데이터를 활용할 수 있으며, 정렬된 순서로 데이터를 저장하고 검색하는 용도로 효과적으로 사용할 수 있습니다.

2.1 정렬된 데이터의 저장과 탐색

TreeMap은 데이터를 정렬된 순서로 저장하여 효율적인 탐색을 제공하는 자바 컬렉션 클래스입니다. 정렬된 데이터의 저장과 탐색에 대해 상세히 알아보겠습니다.

정렬된 데이터의 저장

TreeMap은 데이터를 키를 기준으로 정렬된 순서로 저장합니다. 이진 검색 트리의 형태를 띄고 있기 때문에 데이터를 추가할 때마다 트리의 적절한 위치에 데이터가 저장됩니다. 각 노드는 왼쪽 서브트리의 키들보다 크고 오른쪽 서브트리의 키들보다 작으며, 이를 통해 정렬된 순서를 유지합니다.

TreeMap에 데이터를 추가하는 과정에서는 새로운 데이터가 적절한 위치에 삽입될 때까지 비교와 탐색 작업을 수행합니다. 이를 통해 데이터가 추가될 때마다 정렬된 상태를 유지할 수 있습니다.

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(2, "Apple");
treeMap.put(1, "Banana");
treeMap.put(3, "Cherry");

위의 예제에서는 키값에 따라 데이터를 정렬된 순서로 TreeMap에 추가하였습니다. 결과적으로 TreeMap에는 순서대로 (1, "Banana"), (2, "Apple"), (3, "Cherry")의 데이터가 저장됩니다.

정렬된 데이터의 탐색

TreeMap은 정렬된 데이터의 탐색을 효율적으로 수행할 수 있습니다. 이진 검색 트리의 특성을 이용하여 데이터를 검색하는 과정에서는 탐색 대상 키와 현재 노드의 키를 비교하여 작거나 크거나 같은지를 판단하여 적절한 방향으로 이동합니다.

TreeMap에서 특정 키에 대한 값을 조회하는 과정은 루트 노드부터 시작하여 탐색 대상 키와 현재 노드의 키를 비교하며 이동하는 것으로 이루어집니다. 키의 값에 따라 왼쪽 또는 오른쪽 서브트리로 이동하여 정확한 위치의 노드에 도달할 때까지 탐색을 진행합니다.

String fruit = treeMap.get(2);
System.out.println(fruit); // 출력 결과: Apple

위의 예제에서는 키값 2를 가지는 데이터를 탐색하여 해당 값을 조회하고 출력합니다. 탐색 과정에서는 루트 노드부터 시작하여 키값 2와 현재 노드의 키를 비교하여 오른쪽 서브트리로 이동하여 정확한 위치의 노드에 도달합니다.

정렬된 데이터의 탐색은 이진 검색 트리의 특성을 활용하기 때문에 효율적으로 수행됩니다. 이진 트리의 높이에 따라서 탐색에 필요한 비교 작업의 횟수가 결정되기 때문에, 최악의 경우에도 O(logN)의 시간 복잡도를 가지며 빠른 탐색이 가능합니다.

TreeMap을 사용하여 정렬된 데이터를 저장하고 탐색하는 것은 매우 유용하며, 특정 키를 기준으로 정렬된 데이터에 접근해야 할 때 효과적으로 활용할 수 있습니다.

2.1.1 TreeMap에 데이터 저장하기

TreeMap에 데이터를 저장하는 과정은 새로운 데이터의 추가 및 정렬된 순서 유지를 위해 수행됩니다. TreeMap에 데이터를 저장하는 방법에 대해 상세히 알아보겠습니다.

데이터 추가하기

TreeMap에 데이터를 추가하기 위해서는 put() 메서드를 사용합니다. put() 메서드는 키와 값을 인자로 받아 해당 키-값 쌍을 TreeMap에 추가합니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap을 생성하고 데이터를 추가할 수 있습니다.

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "Apple");
treeMap.put(2, "Banana");
treeMap.put(3, "Cherry");

위의 예제에서는 숫자를 키로 하고 과일 이름을 값으로 하는 데이터를 TreeMap에 추가하였습니다. put() 메서드를 통해 키-값 쌍을 차례로 추가하면 데이터는 자동으로 정렬된 순서로 TreeMap에 저장됩니다.

정렬된 순서 유지하기

TreeMap은 데이터를 키를 기준으로 정렬된 순서로 저장합니다. 데이터를 추가할 때마다 이진 검색 트리의 형태를 띄고 있기 때문에 새로운 데이터가 적절한 위치에 삽입되어 정렬된 상태를 유지할 수 있습니다.

데이터를 추가할 때는 각 노드의 키를 비교하여 삽입할 위치를 결정합니다. 키의 값을 비교하여 작은 값을 가지는 노드는 왼쪽에, 큰 값을 가지는 노드는 오른쪽에 위치하며, 이를 통해 데이터의 정렬된 순서를 구성합니다.

예를 들어, 다음과 같이 키가 정수이고 값이 문자열인 TreeMap을 생성하고 데이터를 추가할 수 있습니다.

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(2, "Apple");
treeMap.put(1, "Banana");
treeMap.put(3, "Cherry");

위의 예제에서는 put() 메서드를 통해 키-값 쌍을 차례로 추가하면, TreeMap은 키를 기준으로 자동으로 정렬된 순서로 데이터를 저장합니다. 따라서 TreeMap에는 (1, "Banana"), (2, "Apple"), (3, "Cherry")의 데이터가 순서대로 저장됩니다.

TreeMap을 사용하여 데이터를 추가할 때는 키의 값에 따라 정렬된 순서를 유지하기 때문에 효율적인 탐색이 가능합니다. 정렬된 순서를 유지하면서 데이터를 저장할 수 있는 TreeMap은 다양한 애플리케이션에서 유용하게 사용될 수 있습니다.

2.1.2 정렬된 데이터 탐색하기

TreeMap은 정렬된 데이터의 탐색을 효율적으로 수행할 수 있습니다. 이진 검색 트리의 특성을 활용하여 키를 기준으로 정확한 위치를 탐색하는 과정에 대해 알아보겠습니다.

데이터 탐색 과정

TreeMap에서 특정 키에 대한 값을 탐색하기 위해서는 get() 메서드를 사용합니다. get() 메서드는 키를 인자로 받아 해당 키를 가진 값을 반환합니다. 이 과정에서는 이진 검색 트리의 특성을 활용하여 효율적으로 탐색을 수행합니다.

탐색 과정은 루트 노드부터 시작하여 탐색 대상 키와 현재 노드의 키를 비교하며 이동하는 것으로 이루어집니다. 비교 결과에 따라 작은 값이면 왼쪽 서브트리로 이동하고, 큰 값이면 오른쪽 서브트리로 이동하여 정확한 위치의 노드에 도달할 때까지 탐색을 진행합니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 특정 키 값을 탐색할 수 있습니다.

String fruit = treeMap.get(2);
System.out.println(fruit); // 출력 결과: Apple

위의 예제에서는 get() 메서드를 활용하여 키값 2를 가지는 데이터의 값을 탐색하고 출력합니다. 탐색 과정에서는 루트 노드부터 시작하여 탐색 대상 키와 현재 노드의 키를 비교하여 작으면 왼쪽, 크면 오른쪽 서브트리로 이동하며, 정확한 위치의 노드를 찾습니다. 따라서 결과적으로 해당 키를 가진 데이터의 값을 탐색할 수 있습니다.

효율적인 탐색

정렬된 데이터의 탐색은 이진 검색 트리의 특성을 활용하여 효율적으로 수행됩니다. 이진 트리의 높이에 따라 탐색에 필요한 비교 작업의 횟수가 결정되기 때문에, 최악의 경우에도 O(logN)의 시간 복잡도를 가지며 빠른 탐색이 가능합니다.

TreeMap은 특정 키를 기준으로 정렬된 데이터에 접근해야 할 때 효과적으로 활용됩니다. 정렬된 데이터를 탐색해야 하는 상황에서 TreeMap을 사용하면 효율적인 탐색을 수행할 수 있으며, 다양한 애플리케이션에서 유용하게 사용될 수 있습니다.

2.2 범위 검색

TreeMap은 범위 검색을 효율적으로 수행할 수 있는 기능을 제공합니다. 정렬된 데이터에서 원하는 범위에 해당하는 데이터를 탐색하는 과정에 대해 알아보겠습니다.

데이터 범위 검색

TreeMap에서 데이터의 범위를 검색하기 위해서는 subMap() 메서드를 사용합니다. subMap() 메서드는 시작 키와 종료 키를 인자로 받아 해당 범위에 해당하는 서브맵을 반환합니다. 이 과정에서는 정렬된 순서를 유지하면서 원하는 범위에 해당하는 데이터를 검색합니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 범위 검색을 수행할 수 있습니다.

SortedMap<Integer, String> subMap = treeMap.subMap(1, 3);
System.out.println(subMap); // 출력 결과: {1=Banana, 2=Apple}

위의 예제에서는 subMap() 메서드를 활용하여 시작 키 1부터 종료 키 3까지에 해당하는 범위의 서브맵을 검색하고 출력합니다. 이때, 시작 키와 종료 키는 범위에 포함되지만, 즉시 앞과 즉시 뒤의 키는 포함되지 않습니다.

효율적인 범위 검색

범위 검색은 TreeMap의 정렬된 순서를 활용하여 효율적으로 수행됩니다. TreeMap은 키를 기준으로 정렬된 순서를 유지하고 있기 때문에, 시작 키와 종료 키를 비교하여 해당 범위에 해당하는 데이터만을 탐색하는 과정을 수행합니다.

탐색 과정에서는 이진 검색 트리의 특성을 활용하여 시작 키와 종료 키를 포함하는 서브맵을 탐색합니다. 이진 검색 트리의 특성을 활용하면 최악의 경우에도 O(logN)의 시간 복잡도로 효율적인 탐색을 수행할 수 있습니다.

TreeMap은 데이터의 범위를 검색해야 할 때 유용하게 사용될 수 있으며, 다양한 애플리케이션에서 데이터의 범위에 따라 탐색하는 기능을 활용할 수 있습니다.

2.3 데이터의 삭제 및 수정

TreeMap은 데이터를 효율적으로 삭제하고 수정할 수 있는 기능을 제공합니다. 정렬된 데이터에서 특정 키에 해당하는 데이터를 삭제하거나 수정하는 과정에 대해 알아보겠습니다.

데이터 삭제

TreeMap에서 데이터를 삭제하기 위해서는 remove() 메서드를 사용합니다. remove() 메서드는 키를 인자로 받아 해당 키에 해당하는 데이터를 삭제합니다. 이때, 키에 해당하는 데이터가 존재하지 않으면 삭제 과정은 이루어지지 않습니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 데이터를 삭제할 수 있습니다.

treeMap.remove(3);

위의 예제에서는 remove() 메서드를 활용하여 키값 3에 해당하는 데이터를 삭제합니다. 이때, 키에 해당하는 데이터와 함께 해당 데이터가 삭제되며, TreeMap의 크기가 1 감소합니다.

데이터 수정

TreeMap에서 데이터를 수정하기 위해서는 put() 메서드를 사용합니다. put() 메서드는 키와 값을 인자로 받아 해당 키에 해당하는 데이터를 수정하거나, 키가 존재하지 않으면 새로운 데이터를 추가합니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 데이터를 수정할 수 있습니다.

treeMap.put(2, "Orange");

위의 예제에서는 put() 메서드를 활용하여 키값 2에 해당하는 데이터의 값을 "Orange"로 수정합니다. 이때, 기존의 값을 "Apple"에서 "Orange"로 변경합니다. 만약 키가 존재하지 않으면 새로운 데이터를 추가합니다.

효율적인 삭제 및 수정

TreeMap은 이진 검색 트리의 특성을 활용하여 데이터의 삭제 및 수정을 효율적으로 수행합니다. 삭제와 수정은 해당 키를 찾아서 데이터를 삭제하거나 수정하는 과정을 거치게 됩니다. 이진 검색 트리는 키를 기준으로 정렬되어 있기 때문에, 삭제나 수정할 데이터의 키를 빠르게 찾아낼 수 있습니다.

따라서 데이터의 삭제 및 수정은 O(logN)의 시간 복잡도를 가지며, 효율적으로 처리될 수 있습니다. TreeMap은 데이터의 삭제나 수정이 빈번히 일어나는 상황에서도 빠른 처리를 할 수 있으며, 다양한 애플리케이션에서 유용하게 사용될 수 있습니다.

데이터의 삭제 및 수정

TreeMap은 데이터를 효율적으로 삭제하고 수정할 수 있는 기능을 제공합니다. 데이터의 삭제와 수정에 대해 친절하게 설명해드리겠습니다.

데이터 삭제

TreeMap에서 데이터를 삭제하기 위해서는 remove() 메서드를 사용합니다. remove() 메서드는 삭제하고자 하는 데이터의 키를 인자로 받아 해당 키에 해당하는 데이터를 삭제합니다. 만약 키에 해당하는 데이터가 존재하지 않으면 삭제되지 않습니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 데이터를 삭제할 수 있습니다.

treeMap.remove(3);

위의 예제에서는 remove() 메서드를 사용하여 키값 3에 해당하는 데이터를 삭제합니다. 이때, 해당 키에 해당하는 데이터가 삭제되며 TreeMap의 크기가 1 감소합니다.

데이터 수정

TreeMap에서 데이터를 수정하기 위해서는 put() 메서드를 사용합니다. put() 메서드는 수정하거나 추가하고자 하는 데이터의 키와 값을 인자로 받아 해당 키에 해당하는 데이터를 수정하거나 새로운 데이터를 추가합니다.

예를 들어, 다음과 같이 키가 Integer 형식이고 값이 String 형식인 TreeMap에서 데이터를 수정할 수 있습니다.

treeMap.put(2, "Orange");

위의 예제에서는 put() 메서드를 사용하여 키값 2에 해당하는 데이터의 값을 "Orange"로 수정합니다. 만약 키가 존재하지 않으면 새로운 데이터가 추가됩니다.

효율적인 삭제 및 수정

TreeMap은 이진 검색 트리의 특성을 활용하여 데이터의 삭제 및 수정을 효율적으로 처리합니다. 삭제와 수정은 해당 키를 찾아서 데이터를 삭제하거나 수정하는 과정을 거치게 됩니다. 이진 검색 트리는 키를 기준으로 정렬되어 있기 때문에, 찾고자 하는 키를 빠르게 탐색할 수 있습니다.

데이터의 삭제 및 수정은 따라서 O(logN)의 시간 복잡도를 가지며, 큰 데이터셋에서도 효율적으로 처리될 수 있습니다. TreeMap은 빈번한 데이터의 삭제 혹은 수정이 발생하는 상황에서도 빠른 연산을 제공하므로, 다양한 애플리케이션에서 사용할 수 있습니다.

3. TreeMap을 활용한 예시

TreeMap은 데이터의 정렬된 형태를 유지하면서 효율적인 데이터 관리를 제공하는 자료구조입니다. TreeMap을 활용하여 예시를 설명해드리겠습니다.

TreeMap의 생성 및 데이터 추가

먼저 TreeMap을 생성하고 데이터를 추가해보겠습니다. 예를 들어, 키가 Integer 형식이고 값이 String 형식인 TreeMap을 생성하고 데이터를 추가하는 코드는 다음과 같습니다.

import java.util.TreeMap;

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

        treeMap.put(3, "Apple");
        treeMap.put(1, "Banana");
        treeMap.put(2, "Orange");
        treeMap.put(4, "Grape");

        System.out.println(treeMap);
    }
}

위의 예제에서는 TreeMap<Integer, String> 형식의 TreeMap을 생성하고, put() 메서드를 사용하여 데이터를 추가합니다.

데이터의 정렬

TreeMap은 데이터를 정렬된 형태로 저장하며, 기본적으로 키를 기준으로 오름차순으로 정렬됩니다. 따라서, TreeMap에 데이터를 추가하게 되면 자동으로 정렬되어 출력됩니다.

위의 예제에서는 데이터가 추가된 후 TreeMap을 출력하게 되면 다음과 같이 정렬된 결과를 확인할 수 있습니다.

{1=Banana, 2=Orange, 3=Apple, 4=Grape}

데이터의 삭제 및 수정

TreeMap에서는 remove() 메서드를 사용하여 데이터를 삭제할 수 있습니다. 예를 들어, 다음과 같이 remove() 메서드를 사용하여 키값 3에 해당하는 데이터를 삭제하는 코드를 작성할 수 있습니다.

treeMap.remove(3);

위의 코드를 실행하면, 키값 3에 해당하는 데이터 "Apple"이 삭제됩니다.

또한, 데이터를 수정하기 위해서는 put() 메서드를 사용합니다. 예를 들어, 다음과 같이 put() 메서드를 사용하여 키값 2에 해당하는 데이터의 값을 "Orange"에서 "Pear"로 수정하는 코드를 작성할 수 있습니다.

treeMap.put(2, "Pear");

위의 코드를 실행하면, 키값 2에 해당하는 데이터의 값이 "Orange"에서 "Pear"로 변경됩니다.

데이터의 조회

TreeMap에서 데이터를 조회하기 위해서는 키 값을 사용합니다. TreeMap은 이진 검색 트리의 특성을 활용하여 효율적인 조회를 제공합니다. 예를 들어, 다음과 같이 get() 메서드를 사용하여 키값 1에 해당하는 데이터를 조회하는 코드를 작성할 수 있습니다.

String value = treeMap.get(1);
System.out.println(value);

위의 코드를 실행하면, 키값 1에 해당하는 데이터 "Banana"가 출력됩니다.

TreeMap은 데이터의 정렬과 삭제, 수정, 조회에 있어서 효율적인 기능을 제공하여 다양한 상황에서 사용될 수 있습니다.

3.1 학생 성적 관리 시스템

학생 성적 관리 시스템은 학생들의 성적을 효율적으로 관리하고 분석하기 위한 도구입니다. TreeMap을 활용하여 학생 성적을 관리하는 예시를 설명해드리겠습니다.

성적 데이터의 구조

학생 성적을 관리하기 위해서는 각 학생의 학번을 키로, 해당 학생의 성적을 값으로 하는 TreeMap을 사용합니다. 키는 Integer 형식이고, 값은 성적 정보를 담고 있는 Student 객체입니다.

import java.util.TreeMap;

public class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    @Override
    public String toString() {
        return name + ": " + score;
    }
}

public class GradeManagementSystem {
    public static void main(String[] args) {
        TreeMap<Integer, Student> studentGrades = new TreeMap<>();

        // 성적 데이터 추가
        studentGrades.put(20190001, new Student("Jane", 90));
        studentGrades.put(20190002, new Student("John", 85));
        studentGrades.put(20190003, new Student("Alice", 92));
        studentGrades.put(20190004, new Student("Bob", 88));

        // 성적 데이터 출력
        for (Student student : studentGrades.values()) {
            System.out.println(student);
        }
    }
}

위의 예제에서는 TreeMap을 활용하여 학생 성적을 관리하는 GradeManagementSystem 클래스를 구현했습니다. 각 학생은 학번을 키로 하고, 이름과 성적을 포함하는 Student 객체를 값으로 가집니다.

성적 데이터의 추가

새로운 학생의 성적을 추가하기 위해서는 put() 메서드를 사용합니다. 각 학생의 학번과 성적을 인자로 넘겨주면 해당 데이터가 TreeMap에 추가됩니다.

studentGrades.put(20190005, new Student("Sarah", 94));

위의 코드를 실행하면, 학번 20190005인 Sarah 학생의 성적이 TreeMap에 추가됩니다.

성적 데이터의 삭제

특정 학생의 성적 데이터를 삭제하기 위해서는 remove() 메서드를 사용합니다. 삭제하고자 하는 학생의 학번을 인자로 넘겨주면 해당 데이터가 삭제됩니다.

studentGrades.remove(20190003);

위의 코드를 실행하면, 학번 20190003인 Alice 학생의 성적 데이터가 TreeMap에서 삭제됩니다.

성적 데이터의 조회

각 학생의 성적 데이터를 조회하기 위해서는 학번을 키로 사용하여 get() 메서드를 사용합니다. 학번을 인자로 넘겨주면 해당 학생의 성적 데이터가 리턴됩니다.

Student student = studentGrades.get(20190002);
System.out.println(student);

위의 코드를 실행하면, 학번 20190002인 John 학생의 성적 데이터가 출력됩니다.

학생 성적 관리 시스템은 TreeMap을 활용하여 학생들의 성적을 효율적으로 관리하고 분석할 수 있는 기능을 제공합니다. TreeMap은 이진 검색 트리의 특성을 활용하여 데이터의 정렬, 삭제, 조회를 효율적으로 처리할 수 있어서 다양한 상황에서 사용될 수 있습니다.

3.2 주소록 관리 시스템

주소록 관리 시스템은 사람들의 연락처 정보를 효율적으로 관리하고 검색하기 위한 도구입니다. TreeMap을 활용하여 주소록을 관리하는 예시를 설명해드리겠습니다.

연락처 데이터의 구조

주소록 관리 시스템은 각 연락처의 이름을 키로, 해당 연락처의 상세 정보를 값으로 하는 TreeMap을 사용합니다. 키는 String 형식이고, 값은 연락처 정보를 담고 있는 Contact 객체입니다.

import java.util.TreeMap;

public class Contact {
    private String name;
    private String phone;
    private String email;

    public Contact(String name, String phone, String email) {
        this.name = name;
        this.phone = phone;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return name + ", " + phone + ", " + email;
    }
}

public class AddressBook {
    public static void main(String[] args) {
        TreeMap<String, Contact> addressBook = new TreeMap<>();

        // 연락처 데이터 추가
        addressBook.put("Jane", new Contact("Jane", "010-1234-5678", "jane@example.com"));
        addressBook.put("John", new Contact("John", "010-9876-5432", "john@example.com"));
        addressBook.put("Alice", new Contact("Alice", "010-1111-2222", "alice@example.com"));

        // 연락처 데이터 출력
        for (Contact contact : addressBook.values()) {
            System.out.println(contact);
        }
    }
}

위의 예제에서는 TreeMap을 활용하여 주소록을 관리하는 AddressBook 클래스를 구현했습니다. 각 연락처는 이름을 키로 하고, 전화번호와 이메일을 포함하는 Contact 객체를 값으로 가집니다.

연락처 데이터의 추가

새로운 연락처를 주소록에 추가하기 위해서는 put() 메서드를 사용합니다. 각 연락처의 이름과 연락처 정보를 인자로 넘겨주면 해당 데이터가 TreeMap에 추가됩니다.

addressBook.put("Sarah", new Contact("Sarah", "010-5555-6666", "sarah@example.com"));

위의 코드를 실행하면, 이름이 Sarah인 연락처의 정보가 주소록에 추가됩니다.

연락처 데이터의 삭제

특정 연락처 데이터를 삭제하기 위해서는 remove() 메서드를 사용합니다. 삭제하고자 하는 연락처의 이름을 인자로 넘겨주면 해당 데이터가 삭제됩니다.

addressBook.remove("John");

위의 코드를 실행하면, 이름이 John인 연락처 데이터가 주소록에서 삭제됩니다.

연락처 데이터의 조회

각 연락처 데이터를 조회하기 위해서는 이름을 키로 사용하여 get() 메서드를 사용합니다. 이름을 인자로 넘겨주면 해당 연락처의 상세 정보가 리턴됩니다.

Contact contact = addressBook.get("Alice");
System.out.println(contact);

위의 코드를 실행하면, 이름이 Alice인 연락처의 상세 정보가 출력됩니다.

주소록 관리 시스템은 TreeMap을 활용하여 사람들의 연락처를 효율적으로 관리하고 검색할 수 있는 기능을 제공합니다. TreeMap은 데이터의 정렬, 삭제, 조회를 효율적으로 처리할 수 있어서 다양한 상황에서 사용될 수 있습니다.

3.3 영화 예매 시스템

영화 예매 시스템은 사용자들이 영화를 선택하고 좌석을 예매하는 프로세스를 효율적으로 관리하는 도구입니다. TreeMap을 활용하여 영화 예매 정보를 관리하는 예시를 설명해드리겠습니다.

예매 정보의 구조

영화 예매 시스템은 각 좌석의 번호를 키로, 해당 좌석의 예매 정보를 값으로 하는 TreeMap을 사용합니다. 키는 String 형식이고, 값은 예매 상태와 사용자 정보를 담고 있는 Reservation 객체입니다.

import java.util.TreeMap;

public class Reservation {
    private boolean isBooked;
    private String userName;

    public Reservation(boolean isBooked, String userName) {
        this.isBooked = isBooked;
        this.userName = userName;
    }

    public boolean isBooked() {
        return isBooked;
    }

    public String getUserName() {
        return userName;
    }

    @Override
    public String toString() {
        return "예매 상태: " + (isBooked ? "예약됨" : "미예약") + ", 예약자: " + userName;
    }
}

public class MovieBookingSystem {
    public static void main(String[] args) {
        TreeMap<String, Reservation> seatMap = new TreeMap<>();

        // 예매 정보 추가
        seatMap.put("A1", new Reservation(true, "Jane"));
        seatMap.put("B2", new Reservation(true, "John"));
        seatMap.put("C3", new Reservation(false, ""));

        // 예매 정보 출력
        for (String seat : seatMap.keySet()) {
            System.out.println(seat + ": " + seatMap.get(seat));
        }
    }
}

위의 예제에서는 TreeMap을 활용하여 영화 예매 정보를 관리하는 MovieBookingSystem 클래스를 구현했습니다. 각 좌석의 번호를 키로 하고, 예매 상태와 예매자 정보를 포함하는 Reservation 객체를 값으로 가집니다.

예매 정보의 추가

새로운 예매 정보를 추가하기 위해서는 put() 메서드를 사용합니다. 각 좌석의 번호와 예매 정보를 인자로 넘겨주면 해당 데이터가 TreeMap에 추가됩니다.

seatMap.put("D4", new Reservation(false, ""));

위의 코드를 실행하면, D4 좌석의 예매 정보가 TreeMap에 추가됩니다.

예매 정보의 변경

특정 좌석의 예매 상태나 예매자 정보를 변경하기 위해서는 put() 메서드를 사용합니다. 변경하고자 하는 좌석의 번호와 새로운 예매 정보를 인자로 넘겨주면 해당 데이터가 업데이트됩니다.

seatMap.put("A1", new Reservation(false, ""));

위의 코드를 실행하면, A1 좌석의 예매 정보가 업데이트됩니다.

예매 정보의 삭제

특정 좌석의 예매 정보를 삭제하기 위해서는 remove() 메서드를 사용합니다. 삭제하고자 하는 좌석의 번호를 인자로 넘겨주면 해당 데이터가 삭제됩니다.

seatMap.remove("B2");

위의 코드를 실행하면, B2 좌석의 예매 정보가 TreeMap에서 삭제됩니다.

예매 정보의 조회

각 좌석의 예매 정보를 조회하기 위해서는 좌석 번호를 키로 사용하여 get() 메서드를 사용합니다. 좌석 번호를 인자로 넘겨주면 해당 좌석의 예매 정보가 리턴됩니다.

Reservation reservation = seatMap.get("C3");
System.out.println(reservation);

위의 코드를 실행하면, C3 좌석의 예매 정보가 출력됩니다.

영화 예매 시스템은 TreeMap을 활용하여 사용자들의 좌석 예매 정보를 효율적으로 관리하고 업데이트할 수 있는 기능을 제공합니다. TreeMap은 데이터의 정렬, 삭제, 조회를 효율적으로 처리할 수 있어서 다양한 상황에서 사용될 수 있습니다.