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));
}
}
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));
}
}