본문 바로가기
카테고리 없음

자바 TreeSet 사용법 & 예제 총정리

by sftt 2023. 12. 1.

자바 TreeSet 사용법 & 예제 총정리

TreeSet이란?

TreeSet은 자바의 컬렉션 프레임워크에서 제공하는 클래스로, 중복을 허용하지 않으면서 정렬된 순서로 요소들을 저장하는 자료구조입니다. 내부적으로 이진 검색 트리(Binary Search Tree)로 구현되어 있으며, 요소의 추가, 삭제, 검색에 대해 빠른 성능을 자랑합니다.

TreeSet 사용법

TreeSet을 사용하기 위해서는 먼저 java.util 패키지를 import 해야 합니다. 다음은 TreeSet 객체를 생성하고 사용하는 기본적인 방법입니다.

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // TreeSet 객체 생성
        TreeSet<Integer> treeSet = new TreeSet<>();

        // 요소 추가
        treeSet.add(2);
        treeSet.add(1);
        treeSet.add(3);

        // 요소 삭제
        treeSet.remove(2);

        // 요소 검색
        boolean contains = treeSet.contains(1);

        // 모든 요소 출력
        for (int element : treeSet) {
            System.out.println(element);
        }
    }
}

위 예제에서는 TreeSet을 생성하고 정수 값들을 요소로 추가한 후, 요소를 검색하고 삭제하는 등의 동작을 수행합니다. TreeSet은 요소를 정렬된 순서로 관리하므로, 13이 출력됩니다.

TreeSet 주요 메소드

TreeSet 클래스에서 제공하는 주요 메소드들을 살펴보겠습니다.

  • add(E e): TreeSet에 지정된 요소를 추가합니다.
  • remove(Object o): TreeSet에서 지정된 요소를 삭제합니다.
  • contains(Object o): TreeSet이 지정된 요소를 포함하고 있는지 여부를 반환합니다.
  • first(): TreeSet의 첫 번째(가장 작은) 요소를 반환합니다.
  • last(): TreeSet의 마지막(가장 큰) 요소를 반환합니다.
  • size(): TreeSet에 저장된 요소의 개수를 반환합니다.
  • isEmpty(): TreeSet이 비어있는지 여부를 반환합니다.
  • clear(): TreeSet의 모든 요소를 삭제합니다.
  • iterator(): TreeSet의 Iterator를 반환합니다.

TreeSet 예제

다음은 TreeSet을 사용한 예제 코드입니다.

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // TreeSet 객체 생성
        TreeSet<String> treeSet = new TreeSet<>();

        // 요소 추가
        treeSet.add("apple");
        treeSet.add("banana");
        treeSet.add("orange");

        // 요소 검색
        boolean contains = treeSet.contains("banana");

        // TreeSet의 첫 번째 요소 출력
        String firstElement = treeSet.first();

        // TreeSet의 마지막 요소 출력
        String lastElement = treeSet.last();

        // TreeSet 크기 출력
        int size = treeSet.size();

        // TreeSet이 비어있는지 여부 출력
        boolean isEmpty = treeSet.isEmpty();

        // TreeSet의 모든 요소 출력
        for (String element : treeSet) {
            System.out.println(element);
        }
    }
}

위 예제에서는 TreeSet에 문자열 값을 요소로 추가하고, 해당 요소들을 검색하고 출력하는 등의 동작을 수행합니다. TreeSet은 문자열을 알파벳 순서로 정렬하여 출력합니다.

TreeSet 정렬 방법 변경

TreeSet은 기본적으로 요소를 오름차순으로 정렬합니다. 하지만 원하는 정렬 순서로 변경할 수 있습니다. 정렬을 변경하려면 TreeSet을 생성할 때 Comparator 인터페이스를 구현한 객체를 전달하면 됩니다. 다음은 내림차순으로 정렬하는 예제 코드입니다.

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // Comparator 인터페이스를 구현한 객체를 전달하여 내림차순으로 정렬
        TreeSet<Integer> treeSet = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o2, o1);
            }
        });

        // 요소 추가
        treeSet.add(2);
        treeSet.add(1);
        treeSet.add(3);

        // 모든 요소 출력
        for (int element : treeSet) {
            System.out.println(element);
        }
    }
}

위 예제에서는 Comparator 인터페이스를 구현한 익명 클래스를 전달하여 내림차순으로 요소를 정렬합니다. 따라서 출력값은 3, 2, 1이 됩니다.

TreeSet 사용 시 유의사항

TreeSet을 사용할 때 몇 가지 유의사항이 있습니다.

  • TreeSet은 정렬된 순서로 요소를 저장하기 때문에 요소의 정렬 방법을 정확히 알아야 합니다. 예를 들어, 문자열을 저장하는 TreeSet에서는 알파벳 순서로 저장되므로 대소문자를 구분하여 저장해야 합니다.
  • TreeSet의 요소는 Comparable 인터페이스를 구현한 클래스 또는 Comparator 인터페이스를 구현한 객체여야 합니다. 이를 만족하지 않는 경우 ClassCastException이 발생할 수 있습니다.
  • TreeSet은 내부적으로 이진 검색 트리로 구현되어 있으므로, 요소의 추가, 삭제, 검색에 대해 O(log N)의 시간 복잡도를 가집니다. 따라서 데이터의 크기가 작을 때는 TreeSet보다 ArrayList나 LinkedList 등 다른 자료구조가 성능상 더 유리할 수 있습니다.

참고 자료

댓글