· LANGUAGE/└ Java

[ Java ] TreeSet 기본 구조 이해 및 실습

감자도리22 2024. 2. 16. 19:20

환경 : Eclipse

 

[ TreeSet ]

TreeSet은 자바 프로그래밍 언어에서 제공하는 자료구조 중 하나로, Set 인터페이스를 구현한 클래스이다.

** 중복된 값을 허용하지 않고, 값을 정렬된 순서로 저장하는 컬렉션

      → HashSet과 달리 이진 탐색 트리 (BinarySearchTree) 구조로 이루어져 있다. 

                                                        └ 추가와 삭제에는 시간이 걸리지만, 검색 및 정렬에 좋은 자료구조

                                                        └ 이진 탐색 트리 중 레드-블랙 트리(Red-Black Tree) 구조로 구현되어 있음


[ TreeSet 이해를 위한 추가 설명 ] 

이해가 됐다면 굳이 읽을 필요 없음

 

 TreeSet이 나무(Tree)라면, 나무의 잎(값)이 달려 있습니다. 각 잎은 나무의 크기 순서로 정렬되어 있다고 볼 수 있습니다. 

 

 여기서 중요한 개념은 '중복된 값이 허용되지 않는다'는 것입니다. (TreeSet에는 같은 값을 두 번 이상 저장할 수 없습니다.) 만약 이미 나무에 해당 잎이 달려 있다면, 같은 잎을 또 다시 추가할 수 없는 것입니다.

 

 또 다른 중요한 특징은 '정렬된 순서로 값이 저장된다'는 것입니다. 이것은 나중에 값을 찾거나 정렬된 상태로 사용할 때 좋습니다.


[ TreeSet 사용예제 ]

- 시험 점수를 저장하는 TreeSet

- 중복된 값은 또 추가되지 않음

import java.util.TreeSet;

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

        // 시험 점수 추가
        examScores.add(85);
        examScores.add(92);
        examScores.add(78);
        examScores.add(96);

        // 중복된 값 추가 시도 (이미 78이 있으므로 추가되지 않음)
        examScores.add(78);

        // TreeSet 출력
        System.out.println("시험 점수 목록: " + examScores);
    }
}

 

    (+) 점수 추가에 add() 메소드를 쓰는 것처럼 다른 일을 할 때에도 메소드를 사용한다.

         예) remove(), clear(), size() 등

 

 

 - 출력결과

시험 점수 목록: [78, 85, 92, 96]

 


(참고) 저장되는 구조 이해

출처 : https://coding-factory.tistory.com/555

    (+) 예시 코드의 값과 그림의 값이 다르지만, 이해를 위해 해당 티스토리에서 가져왔습니다.


[ TreeSet 사용예제2 - 업캐스팅 ]

 

  - 전체코드

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {

        // TreeSet 인스턴스 생성
        Set<String> words = new TreeSet<>();

        // 데이터 추가
        words.add("Apple");
        words.add("Banana");
        words.add("Orange");
        words.add("Grapes");
        words.add("Banana"); // 중복된 데이터 추가 시도

        // 데이터 검색
        // - "Orange"가 저장소에 있습니까?
        System.out.println("\"Orange\"가 저장소에 있습니까? " + words.contains("Orange"));

        // 데이터 삭제
        words.remove("Apple");

        // 새로운 데이터 추가
        words.add("Mango");

        // 데이터 출력
        System.out.println("저장소의 모든 데이터: " + words);
        System.out.println("데이터 개수: " + words.size());
    }
}

 

 

  - TreeSet 인스턴스 생성

// TreeSet 인스턴스 생성
Set<String> words = new TreeSet<>(); //업캐스팅

    (+) Set 인터페이스는 TreeSet 클래스를 구현하고 있기 때문에, TreeSet 객체를 Set 참조 변수에 할당할 수 있다.

 

  - add(), 데이터 추가

// 데이터 추가
words.add("Apple");
words.add("Banana");
words.add("Orange");
words.add("Grapes");
words.add("Banana"); // 중복된 데이터 추가 시도

    (+) 중복된 데이터를 추가하려 해도 추가되지 않음.

 

- contains(), 데이터 검색

// 데이터 검색
// - "Orange"가 저장소에 있습니까?
System.out.println("\"Orange\"가 저장소에 있습니까? " + words.contains("Orange"));

    (+) words 트리셋 안에 "Orange" 문자열이 있는지 확인

    (+) boolean 값 반환

 

  - remove(), 데이터 삭제

// 데이터 삭제
words.remove("Apple");

 

  - size(), 데이터 개수

System.out.println("데이터 개수: " + words.size());

 

 

 

 

 

 

개인 공부 기록용입니다:)

728x90