Java/자바 정리
146. TreeMap으로 정렬과 구간 검색하기
코딩하는냥이
2025. 5. 21. 11:20
반응형
TreeMap은 키를 기준으로 자동 정렬되는 Map 컬렉션입니다.
데이터를 저장할 때 키의 오름차순으로 정렬되며,
firstEntry(), lastEntry() 등을 통해 처음과 마지막 데이터를 쉽게 조회할 수 있습니다.
또한, subMap()이나 descendingMap() 등을 사용해 범위 검색이나 역순 탐색도 간단히 처리할 수 있습니다.
📌 예제 코드
import java.util.*;
import java.util.Map.Entry;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
treeMap.put("apple", 10);
treeMap.put("forever", 60);
treeMap.put("description", 40);
treeMap.put("ever", 50);
treeMap.put("zoo", 80);
treeMap.put("base", 20);
treeMap.put("guess", 70);
treeMap.put("cherry", 30);
Set<Entry<String, Integer>> entrySet = treeMap.entrySet();
for (Entry<String, Integer> entry : entrySet)
System.out.println(entry.getKey() + "-" + entry.getValue());
System.out.println();
Entry<String, Integer> entry = null;
entry = treeMap.firstEntry();
System.out.println("제일 앞 단어 : " + entry.getKey() + "-" + entry.getValue());
entry = treeMap.lastEntry();
System.out.println("제일 뒷 단어 : " + entry.getKey() + "-" + entry.getValue());
entry = treeMap.lowerEntry("ever");
System.out.println("ever 앞 단어 : " + entry.getKey() + "-" + entry.getValue() + "\n");
NavigableMap<String, Integer> navigableMap = treeMap.descendingMap();
entrySet = navigableMap.entrySet();
for (Entry<String, Integer> e : entrySet)
System.out.println(e.getKey() + "-" + e.getValue());
System.out.println();
System.out.println("[c-h 사이의 단어 검색]");
navigableMap = treeMap.subMap("c", true, "h", false);
for (Entry<String, Integer> e : navigableMap.entrySet())
System.out.println(e.getKey() + "-" + e.getValue());
}
}
💻 실행 결과
apple-10
base-20
cherry-30
description-40
ever-50
forever-60
guess-70
zoo-80
제일 앞 단어 : apple-10
제일 뒷 단어 : zoo-80
ever 앞 단어 : description-40
zoo-80
guess-70
forever-60
ever-50
description-40
cherry-30
base-20
apple-10
[c-h 사이의 단어 검색]
cherry-30
description-40
ever-50
forever-60
💬 코드 설명
- TreeMap은 데이터를 키 기준 오름차순으로 자동 정렬하여 저장합니다.
- firstEntry()와 lastEntry()는 가장 앞/뒤에 위치한 키-값 쌍을 반환합니다.
- lowerEntry("ever")는 "ever"보다 사전순으로 앞에 오는 키를 찾습니다.
- descendingMap()을 사용하면 전체 데이터를 내림차순으로 탐색할 수 있습니다.
- subMap("c", true, "h", false)는 키가 "c" 이상 "h" 미만인 데이터를 반환하여,
범위 기반 검색도 쉽게 구현할 수 있습니다.
💡 포인트 정리
- TreeMap은 Map의 정렬된 버전으로, 키의 정렬 기준에 따라 저장과 검색이 처리됩니다.
- 기본 정렬은 오름차순이며, descendingMap()을 이용해 내림차순 순회도 가능합니다.
- subMap(), headMap(), tailMap() 등을 통해 범위 조건을 세밀하게 설정할 수 있습니다.
- 문자열 데이터를 다룰 때 사전순 정렬이 필요한 경우 매우 유용합니다.
📌정리하자면, TreeMap은 정렬이 자동으로 이루어지는 Map 컬렉션으로,
사전순 탐색, 범위 지정, 역순 탐색 등 다양한 기능을 기본적으로 지원합니다.
이번 예제를 통해 데이터를 키 기준으로 정렬하고 다양한 조건으로 검색하는 방법을 익히셨다면,
TreeMap의 강력함을 실무에도 적극적으로 활용하실 수 있을 것입니다.