어제 오늘 내일

[Java TreeSet] 주요 메소드 정리 및 활용 예제 본문

IT/Java

[Java TreeSet] 주요 메소드 정리 및 활용 예제

hi.anna 2025. 10. 9. 01:17

TreeSetNavigableSet을 구현한 클래스이며, 내부적으로 이진 탐색 트리(Red-Black Tree) 구조를 사용합니다. 따라서 데이터가 자동으로 정렬된 상태로 저장되며, 범위 검색이나 정렬이 필요한 경우 유용합니다.

 

1. add()

import java.util.TreeSet;

public class TreeSetAdd {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(30);
        set.add(10);
        set.add(20);
        set.add(10); // 중복은 무시

        System.out.println(set); // [10, 20, 30]
    }
}

중복은 허용하지 않고, 항상 오름차순 정렬된 상태로 저장됩니다.

 

2. remove()

import java.util.TreeSet;

public class TreeSetRemove {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("kim");
        set.add("lee");
        set.add("park");

        boolean removed = set.remove("lee");
        System.out.println(removed); // true
        System.out.println(set);     // [kim, park]
    }
}

특정 요소를 삭제하고 성공 여부를 반환합니다.

 

3. contains()

import java.util.TreeSet;

public class TreeSetContains {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("apple");
        set.add("banana");

        System.out.println(set.contains("apple"));  // true
        System.out.println(set.contains("cherry")); // false
    }
}

특정 값의 존재 여부를 확인합니다.

 

4. first(), last()

import java.util.TreeSet;

public class TreeSetFirstLast {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(5);
        set.add(1);
        set.add(9);

        System.out.println(set.first()); // 1
        System.out.println(set.last());  // 9
    }
}

가장 작은 값과 가장 큰 값을 바로 가져올 수 있습니다.

 

5. higher(), lower(), ceiling(), floor()

import java.util.TreeSet;

public class TreeSetSearch {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(10);
        set.add(20);
        set.add(30);

        System.out.println(set.higher(20));  // 30 (보다 큰 값 중 최소)
        System.out.println(set.lower(20));   // 10 (보다 작은 값 중 최대)
        System.out.println(set.ceiling(20)); // 20 (이상인 값 중 최소)
        System.out.println(set.floor(25));   // 20 (이하인 값 중 최대)
    }
}

트리 구조라서 인접 원소를 찾는 데 매우 빠릅니다.

 

6. subSet(), headSet(), tailSet()

import java.util.*;

public class TreeSetRange {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>(Arrays.asList(10,20,30,40,50));

        System.out.println(set.subSet(20, 50)); // [20, 30, 40]
        System.out.println(set.headSet(30));    // [10, 20]
        System.out.println(set.tailSet(30));    // [30, 40, 50]
    }
}

특정 범위의 데이터를 쉽게 잘라낼 수 있습니다.

 

7. clear(), size(), isEmpty()

import java.util.TreeSet;

public class TreeSetClearSize {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("kim");
        set.add("lee");

        System.out.println(set.size());    // 2
        System.out.println(set.isEmpty()); // false

        set.clear();
        System.out.println(set.isEmpty()); // true
    }
}

요소 개수 확인, 비었는지 체크, 전체 삭제를 할 수 있습니다.

 

결론

  • TreeSet은 자동 정렬 + 중복 허용 안 함
  • 탐색 관련 메소드가 풍부해 범위 검색, 순차 탐색에 강점
  • 주요 메소드: add, remove, contains, first, last, higher, lower, ceiling, floor, subSet, headSet, tailSet, clear, size, isEmpty
  • 순서 유지가 필요하다면 LinkedHashSet, 정렬된 결과가 필요하다면 TreeSet이 적합

 

반응형
Comments