Java/자바 정리

145. TreeSet으로 정렬과 범위 검색하기

코딩하는냥이 2025. 5. 21. 10:56
반응형

TreeSet은 Set 컬렉션 중에서 자동 정렬 기능이 있는 자료구조입니다.
저장된 데이터는 입력 순서와 관계없이 오름차순으로 정렬되어 저장되며,
특정 값보다 높은 값, 낮은 값, 구간 검색 등 다양한 탐색 기능을 제공합니다.
이번 예제에서는 TreeSet을 활용해 정렬, 최대·최소, 범위 검색 기능을 실습해 보겠습니다.


📌 예제 코드

import java.util.NavigableSet;
import java.util.TreeSet;

public class TreeSetExample {
	public static void main(String[] args) {
		TreeSet<Integer> scores = new TreeSet<Integer>();
		
		scores.add(87);
		scores.add(98);
		scores.add(75);
		scores.add(95);
		scores.add(80);
		
		for (Integer s : scores)
			System.out.print(s + " ");
		
		System.out.println("\n\n가장 낮음 점수 : " + scores.first());
		System.out.println("가장 높은 점수 : " + scores.last());
		System.out.println("95점 아래 점수 : " + scores.lower(95));
		System.out.println("95점 위의 점수 : " + scores.higher(95));
		System.out.println("95점이거나 바로 아래 점수 : " + scores.floor(95));
		System.out.println("85점이거나 바로 위의 점수 : " + scores.ceiling(85) + "\n");
		
		System.out.print("정렬 : ");
		NavigableSet<Integer> navigableSet = scores.descendingSet();
		for (Integer s : navigableSet)
			System.out.print(s + " ");
		System.out.println();
		
		System.out.print("80이상 : ");
		NavigableSet<Integer> rangeSet = scores.tailSet(80, true);
		for (Integer s : rangeSet)
			System.out.print(s + " ");
		System.out.println();
		
		System.out.print("80이상 / 90미만 : ");
		rangeSet = scores.subSet(80, true, 90, false);
		for (Integer s : rangeSet)
			System.out.print(s + " ");
		System.out.println();
	}
}

💻 실행 결과

75 80 87 95 98 

가장 낮음 점수 : 75
가장 높은 점수 : 98
95점 아래 점수 : 87
95점 위의 점수 : 98
95점이거나 바로 아래 점수 : 95
85점이거나 바로 위의 점수 : 87

정렬 : 98 95 87 80 75 
80이상 : 80 87 95 98 
80이상 / 90미만 : 80 87

💬 코드 설명

  • TreeSet은 데이터를 자동으로 오름차순 정렬하여 저장합니다.
  • first()와 last()를 사용하면 가장 작은 값과 큰 값을 가져올 수 있습니다.
  • lower(), higher(), floor(), ceiling() 등 다양한 근접 값 탐색 메서드를 지원합니다.
  • descendingSet()은 저장된 데이터를 내림차순으로 반환합니다.
  • tailSet(80, true)은 80 이상인 값들을 가져오며,
    subSet(80, true, 90, false)은 80 이상 90 미만인 값들만 가져옵니다.

💡 포인트 정리

  • TreeSet은 정렬이 필요한 Set 자료형이 필요한 경우 가장 적합합니다.
  • 값의 정렬과 함께 범위 검색, 위·아래 값 탐색, 역순 정렬 기능이 기본적으로 내장되어 있어 유용합니다.
  • NavigableSet 인터페이스를 통해 다양한 탐색 기능을 제공하며, 효율적인 범위 기반 처리가 가능합니다.

📌정리하자면, TreeSet은 단순히 데이터를 저장하는 것이 아니라, 자동 정렬과 범위 탐색 기능까지 제공하는 고급 컬렉션입니다.
이번 예제를 통해 정렬된 데이터를 효율적으로 관리하고 검색하는 다양한 기능을 익히셨을 것입니다.
정렬이나 구간 조회가 필요한 상황에서는 TreeSet을 적극적으로 활용해보시기 바랍니다.