🎯 목표 : TreeSet의 활용 방법 이해
📒 TreeSet

❗특징
- 범위 검색과 정렬에 유리한 이진 탐색 트리로 구현
- LinkedList 처럼 각 요소(node)가 나무 형태로 연결된 구조
- 모든 노드가 최대 두개의 하위 노드를 가지고 있다(부모 자식 관계)
- 값을 저장할때 부모 노드보다 작으면 왼쪽 크면 오른쪽에 저장한다.
- 중복된 값은 저장할수 없다.
- HashSet보다 데이터 추가 삭제에 상대적으로 시간이 오래걸린다. - 반복적인 비교 후 저장.
- 각 노드들은 아래 클래스를 인스턴스화 된 인스턴스들이다.
class Node {
Object element; // 주소값을 저장하는 참조변수
Node left; // 왼쪽 노드의 주소값을 저장하는 참조변수
Node right; // 오른쪽 노드의 주소값을 저장하는 참조변수
}
📌 TreeSet의 생성자와 메소드


📌 예제 1
- TreeSet은 기본 정렬기준은 오름차순이다.
import java.util.*;
class TreeSetStudy {
public static void main(String[] args) {
Set set = new TreeSet();
for (int i = 0; set.size() < 6 ; i++) {
int num = (int)(Math.random()*45) + 1;
set.add(num); // set.add(new Integer(num));
}
// TreeSet의 기본 정령 기준은 오름차순이다.
System.out.println(set);
}
}
출력값
[6, 10, 13, 17, 24, 34] 숫자 랜덤 출력
📌 예제 2
- 기본 정렬 기준은 오름차순 - 사전순으로 정렬되며, subSet의 검색 범위의 b~d 중 d의 값은 포함하지 않는다.
import java.util.*;
class TreeSetStudy2 {
public static void main(String[] args) {
TreeSet set = new TreeSet();
String from = "b";
String to = "d";
set.add("flow"); set.add("Apple"); set.add("bat");
set.add("cow"); set.add("Car"); set.add("disc");
set.add("dark"); set.add("delete"); set.add("Black");
set.add("elephant"); set.add("elevator"); set.add("green");
set.add("flower");
System.out.println(set); // 자동 사전 정렬 순서대로(오름차순) 정렬된다.
System.out.println("range search : from " + from +" to "+ to);
System.out.println("result1 : " + set.subSet(from, to)); // b 에서 d 사이의 요소를 찾는다 "d는 제외한다"
System.out.println("result2 : " + set.subSet(from, to + "zzz"));// b 에서 d+zzz = "dzzz" 까지 찾는다
}
}
[Apple, Black, Car, bat, cow, dark, delete, disc, elephant, elevator, flow, flower, green]
range search : from b to d
result1 : [bat, cow]
result2 : [bat, cow, dark, delete, disc]
📌 예제 3
- headSet은 정해진 요소를 포함하지 않고 작은것을 검색하며, tailSet은 정해진 요소를 포함하여 검색한다.
import java.util.*;
class TreeSetStudy3 {
public static void main(String[] args) {
TreeSet set = new TreeSet();
int[] score = {80, 95, 50, 35, 45, 65, 10, 100};
for(int i=0; i < score.length; i++)
set.add(score[i]);
System.out.println(set);
System.out.println("50 > " + set.headSet(50));
System.out.println("50 <= " + set.tailSet(50));
}
}
[10, 35, 45, 50, 65, 80, 95, 100]
50 > [10, 35, 45]
50 <= [50, 65, 80, 95, 100]
'Language > JAVA' 카테고리의 다른 글
| Java Class Collections (0) | 2022.08.29 |
|---|---|
| Java HashMap (Interface Map) (0) | 2022.08.29 |
| Java Class HashSet (Interface Set) (0) | 2022.08.28 |
| Java Comparator 와 Comparable (0) | 2022.08.28 |
| Java Class Arrays (0) | 2022.08.28 |