본문 바로가기

Programming language/Java

[JAVA] TreeSet

TreeSet
1. 이진 탐색 트리(binary search tree)로 구현. 범위 탐색과 정렬에 유리.
2. 이진트리(binary tree)는 모든 노드가 최대 2개의 하위 노드를 가짐
3. 각 요소(node)가 나무(tree) 형태로 연결(LinkedList의 변형)

이진 탐색 트리(binary search tree)
1. 부모보다 작은 값은 왼쪽, 큰 값은 오른쪽에 저장하는 이진트리
2. 단점 : 데이터가 많아질수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)

데이터 저장과정 boolean add(Object obj)
1. HashSet 은 equals(), hashCode()로 비교
2. TreeSet 은 compare()를 호출해서 비교
3. 루트부터 트리를 따라 내려가며 값을 비교, 작으면 왼쪽, 크면 오른쪽에 저장

*정리*

TreeSet은 정렬과 범위 검색에 유리하지만 데이터가 늘어날수록 추가와 삭제에 시간이 오래 걸린다.

package org.example.ch11;

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

public class Ch11_42_43_44_45 {
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);
}
System.out.println(set);

TreeSet set1 = new TreeSet();

String from = "b";
String to = "d";

set1.add("abc");
set1.add("bdfs");
set1.add("fdfs");
set1.add("cdsf");
set1.add("dfsf");
set1.add("efdsa");

System.out.println(set1.subSet("b","e"));

TreeSet set2 = new TreeSet();
int[] score = {80, 95, 50, 35, 45, 65, 10, 100};

for(int i=0; i<score.length; i++){
set2.add(score[i]);
}

System.out.println("50보다 작은 값: " + set2.headSet(50));
System.out.println("50보다 큰 값: " + set2.tailSet(50));
System.out.println("40 80사이의 값: " + set2.subSet(40, 80));

}
}