행복을 담는 블로그
[Java / 자료구조] TreeMap / TreeSet 이란? 본문
💡 TreeMap과 TreeSet이란?
TreeMap:
- TreeMap은 키-값 쌍을 저장하는 Map 인터페이스의 구현체로, 키를 기준으로 자동으로 오름차순 정렬됩니다.
- 내부적으로 Red-Black Tree 자료구조를 사용하여 데이터 삽입/삭제/검색을 수행합니다.
- 정렬 기준을 커스터마이즈하려면 Comparator를 지정할 수 있습니다.
TreeSet:
- TreeSet은 고유한 값을 저장하는 Set 인터페이스의 구현체로, 값을 기준으로 자동으로 오름차순 정렬됩니다.
- 내부적으로 TreeMap을 활용하여 데이터의 중복을 방지하고 정렬을 유지합니다.
- 정렬 기준을 커스터마이즈하려면 Comparator를 지정할 수 있습니다.
TreeMap 사용법 (Java 예제)
import java.util.*;
public class TreeMapExample {
public static void main(String[] args) {
// TreeMap 선언
TreeMap<Integer, String> treeMap = new TreeMap<>();
// 데이터 추가
treeMap.put(3, "Three");
treeMap.put(1, "One");
treeMap.put(2, "Two");
// 출력: 키는 정렬된 순서로 저장됨
System.out.println(treeMap);
// 특정 키 검색
System.out.println("Key 2의 값: " + treeMap.get(2));
// 첫 번째 키와 마지막 키
System.out.println("첫 번째 키: " + treeMap.firstKey());
System.out.println("마지막 키: " + treeMap.lastKey());
// 하위/상위 맵
System.out.println("1보다 작은 값: " + treeMap.headMap(1));
System.out.println("2 이상의 값: " + treeMap.tailMap(2));
// 키-값 삭제
treeMap.remove(2);
System.out.println("Key 2 삭제 후: " + treeMap);
}
}
TreeSet 사용법 (Java 예제)
import java.util.*;
public class TreeSetExample {
public static void main(String[] args) {
// TreeSet 선언
TreeSet<Integer> treeSet = new TreeSet<>();
// 데이터 추가
treeSet.add(5);
treeSet.add(3);
treeSet.add(1);
// 출력: 값은 정렬된 순서로 저장됨
System.out.println(treeSet);
// 값 존재 여부 확인
System.out.println("3이 포함되어 있는가? " + treeSet.contains(3));
// 첫 번째와 마지막 값
System.out.println("첫 번째 값: " + treeSet.first());
System.out.println("마지막 값: " + treeSet.last());
// 하위/상위 집합
System.out.println("3보다 작은 값: " + treeSet.headSet(3));
System.out.println("3 이상의 값: " + treeSet.tailSet(3));
// 값 삭제
treeSet.remove(3);
System.out.println("3 삭제 후: " + treeSet);
}
}
2. TreeMap/TreeSet vs. HashMap/HashSet 차이점
특징 | TreeMap/TreeSet | HashMap/HashSet |
정렬 | 키(TreeMap) 또는 값(TreeSet)이 자동으로 정렬 | 데이터 삽입 순서 또는 무작위 순서로 저장 |
검색 속도 | O(log n) (Red-Black Tree) | O(1) (Hashing) |
Null 허용 여부 | TreeMap: Null 키 허용 불가 Null 값 가능 TreeSet: Null 값 허용 불가 |
HashMap: Null 키/값 허용 HashSet: Null 값 허용 |
정렬 기준 커스터마이즈 | 가능 (Comparator) | 불가능 |
적합한 경우 | - 데이터가 정렬되어 있어야 할 때 - 범위 검색이 필요할 때 |
- 데이터가 순서와 상관없이 빠르게 저장/검색되어야 할 때 |
사용 예시
- TreeMap/TreeSet:
- 데이터 정렬이 필요한 경우: 순위표, 범위 검색(예: 1~10 사이 값 찾기).
- Comparator를 사용해 정렬 기준 변경.
- HashMap/HashSet:
- 데이터 검색 속도가 중요하고 정렬이 필요 없는 경우: 빠른 검색이 요구되는 캐시 시스템.
3. TreeMap/TreeSet 주요 메서드
TreeMap 주요 메서드
메서드 | 설명 |
put(K key, V value) | 키와 값을 저장 |
get(K key) | 키에 해당하는 값 반환 |
remove(K key) | 특정 키와 그에 해당하는 값을 삭제 |
firstKey() | 첫 번째 키 반환 |
lastKey() | 마지막 키 반환 |
headMap(K toKey) | 특정 키보다 작은 키-값 쌍 반환 |
tailMap(K fromKey) | 특정 키보다 큰(같거나 큰) 키-값 쌍 반환 |
subMap(K fromKey, K toKey) | 특정 범위의 키-값 쌍 반환 |
TreeSet 주요 메서드
메서드 | 설명 |
add(E e) | 값을 추가 (중복 불가) |
remove(Object o) | 특정 값을 삭제 |
contains(Object o) | 특정 값이 포함되어 있는지 확인 |
first() | 첫 번째 값 반환 |
last() | 마지막 값 반환 |
headSet(E toElement) | 특정 값보다 작은 값 반환 |
tailSet(E fromElement) | 특정 값보다 큰(같거나 큰) 값 반환 |
subSet(E fromElement, E toElement) | 특정 범위의 값 반환 |
결론
- TreeMap/TreeSet:
- 정렬 및 범위 검색이 필요할 때 사용.
- HashMap/HashSet:
- 빠른 데이터 검색과 저장이 필요할 때 사용.
'BackEnd > Java' 카테고리의 다른 글
[Java / 자료구조] 트리(Tree) (0) | 2024.12.23 |
---|---|
[Java / 자료구조] 그래프(Graph) (0) | 2024.12.21 |
[Java / 자료구조] Array v.s. LinkedList (0) | 2024.12.11 |
[Java] int 와 long 데이터 타입 크기 / 백준 2420번 (0) | 2024.07.12 |
[Java] Scanner() 로 input 값 입력 받기 (1) | 2024.07.11 |