언어(Language)/Java

[Java] 자바 TreeSet 개념 정리 및 활용

잇트루 2022. 9. 22. 06:00
반응형

트리셋 (TreeSet)

TreeSet은 이진 탐색 트리 형태로 데이터를 저장한다. 또한, Set 인터페이스의 특성인 데이터의 중복 저장을 허용하지 않으며, 순서 또한 유지하지 않는다.

 

이진 탐색 트리(Binary Search Tree)는 하나의 부모 노드가 최대 두 개의 자식 노드와 연결된 형태로 데이터를 저장한 자료 구조이다.

이진 탐색 트리는 이진트리(Binary Tree)의 일종으로 정렬과 검색에 특화된 자료 구조이다.

최상위 노드를 루트 노드라 하며 그림의 10에 해당된다.

이진 탐색 트리는 모든 왼쪽 자식의 값이 루트나 부모 노드보다 작고, 모든 오른쪽 자식의 값은 루트나 부모 노드보다 큰 값을 가지는 것이 특징이다.

따라서, TreeSet에 값을 추가하면 정렬도 함께 실시하게 된다.

 

이진 탐색 트리는 다음과 같은 형태로 구현된다.

class Node {
    Object element; // 객체의 주소값을 저장하는 참조변수
    Node left; // 왼쪽 자식 노드의 주소값을 저장하는 참조변수
    Node right; // 오른쪽 자식 노드의 주소값을 저장하는 참조변수
}

 

TreeSet을 활용하는 예제이다.

import java.util.TreeSet;

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

        // TreeSet에 요소 추가
        treeSet.add("Hong Gildong");
        treeSet.add("Tree Set");
        treeSet.add("Hello Java");

        // TreeSet 출력
        System.out.println(treeSet);
        System.out.println(treeSet.first());
        System.out.println(treeSet.last());
        System.out.println(treeSet.higher("Hello"));
        System.out.println(treeSet.subSet("Hong", "Tree"));
    }
}
// 출력
[Hello Java, Hong Gildong, Tree Set]
Hello Java
Tree Set
Hello Java
[Hong Gildong]

위 코드를 실행하면, 요소를 추가하기만 해도 자동으로 정렬된다.

TreeSet의 기본 정렬 방식은 오름차순으로 문자열의 경우 사전 편찬 순에 따라 정렬한다.

 

TreeSet에 대한 추가적인 정보는 공식 문서에서 확인할 수 있다.

https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

 

TreeSet (Java Platform SE 7 )

A NavigableSet implementation based on a TreeMap. The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used. This implementation provides guaranteed log(n) time cost for

docs.oracle.com

 

반응형