충분히 쌓여가는
TreeSet의 주요 생성자와 메서드 본문
TreeSet의 주요 생성자와 메서드
생성자 또는 메서드 | 설명 |
TreeSet() | 기본 생성자 |
TreeSet(Collcetion c) | 주어진 컬렉션을 저장하는 TreeSet을 생성 |
TreeSet(Comparator comp) | 주어진 정렬기준으로 정렬하는 TreeSet을 생성 |
Object first() | 정렬된 순서에서 첫 번째 객체를 반환한다 |
Object last() | 정렬된 순서에서 마지막 객체를 반환한다 |
Object ceiling(Object o) | 지정된 객체와 같은 객체를 반환, 없으면 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환, 없으면 null |
Object floor(Object o) | 지정된 객체와 같은 객체를 반환, 없으면 작은 값을 가진 객체 중 제일 가까운 값을 객체를 반환, 없으면 null |
Object higher(Object o) | 지정된 객체보다 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환, 없으면 null |
Object lower(Object o) | 지정된 객체보다 작은 값을 가진 객체 중 제일 가까운 값의 객체를 반환, 없으면 null |
SortedSet subSet(Object fromElement, Object toElement) | 범위 검색(fromElement와 toElement 사이)의 결과를 반환한다 (끝 범위인 toElement는 범위에 포함되지 않음) |
SortedSet headSet(Object toElement) | 지정된 객체보다 작은 값의 객체들을 반환한다 |
SortedSet tailSet(Object fromElement) | 지정된 객체보다 큰 값의 객체들을 반환한다 |
코드
TreeSet이기 때문에 정렬되어 출력된다
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
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));
}
System.out.println(set);
}
}
[20, 29, 32, 34, 36, 42]
HashSet일 경우 정렬되지 않는다
import java.util.HashSet;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set set = new HashSet();
for (int i = 0; set.size() < 6 ; i++) {
int num = (int)(Math.random()*45) + 1;
set.add(num); // set.add(new Integer(num));
}
System.out.println(set);
}
}
[6, 22, 38, 9, 43, 15]
HashSet을 정렬할 경우 list로 변환 후 정렬한다
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.Collections;
public class HashSetTest2 {
public static void main(String[] args) {
Set set = new HashSet();
// set의 크기가 6보다 작은 동안 1~45 사이의 난수를 저장
for (int i = 0; set.size() < 6 ; i++) {
int num = (int)(Math.random()*45) + 1;
// set.add(new Integer(num));
set.add(num);
}
// set은 정렬불가능하기 때문에 set을 list로 옮겨서 정렬한다
List list = new LinkedList(set); // LinkedList(Collection c)
Collections.sort(list); // Collections.sort(List list)
System.out.println(list);
}
}
[8, 9, 11, 12, 14, 18]
에러 발생(비교 기준이 없기 때문)
set의 add 메서드는 비교하면서 저장한다, 하지만 비교 기준이 없기 때문에 에러가 발생한다
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
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(new Test()); // set.add(new Integer(num));
}
System.out.println(set);
}
}
class Test {} // 비교 기준 없음
이럴땐 비교기준을 만들어주면 된다
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set set = new TreeSet(new TestComp()); // 새로만든 비교 기준 TestComp()를 넣어줘야 한다
// for문이 계속 돌기 때문에 주석 처리
// for (int i = 0; set.size() < 6 ; i++) {
// int num = (int)(Math.random()*45) + 1;
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
// }
System.out.println(set);
}
}
class Test {}
class TestComp implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return -1; // return 0 이면 같은 객체로 판단하기 때문에 값이 하나로 나옴, 1또는 -1로 해야됨
}
}
[Test@5594a1b5, Test@6a5fc7f7, Test@3b6eb2ec, Test@1e643faf, Test@6e8dacdf]
Test 클래스가 Comparable 구현한다면 Comparator을 안넣어도 된다
new TestComp()지워도 된다
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set set = new TreeSet(); // 새로만든 비교 기준 TestComp()를 넣어줘야 한다
// for문이 계속 돌기 때문에 주석 처리
// for (int i = 0; set.size() < 6 ; i++) {
// int num = (int)(Math.random()*45) + 1;
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
set.add(new Test()); // set.add(new Integer(num));
// }
System.out.println(set);
}
}
class Test implements Comparable{
@Override
public int compareTo(Object o) {
return -1;
}
}
class TestComp implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return -1; // return 0 이면 같은 객체로 판단하기 때문에 값이 하나로 나옴, 1또는 -1로 해야됨
}
}
[Test@3ac3fd8b, Test@5594a1b5, Test@6a5fc7f7, Test@3b6eb2ec, Test@1e643faf]
즉, TreeSet은 비교기준이 필요하기 때문에 저장하는 객체가 Comparable을 가지고 있든지[set.add(new Test())], TreeSet이 어떤 비교 기준[new TestComp()]을 갖도록 해야한다
코드
b~d사이의 단어 출력
import java.util.*;
public class TreeSetTest2 {
public static void main(String[] args) {
TreeSet set = new TreeSet(); // 범위 검색에 유리(from~to)
String from = "b";
String to = "d";
set.add("abc"); set.add("alien"); set.add("bat");
set.add("car"); set.add("Car"); set.add("disc");
set.add("dance"); set.add("dZZZZ"); set.add("dzzzz");
set.add("elephant"); set.add("elevator"); set.add("fan");
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
System.out.println("result2 : " + set.subSet(from, to + "zzz"));
}
}
[Car, abc, alien, bat, car, dZZZZ, dance, disc, dzzzz, elephant, elevator, fan, flower]
range search : from b to d
result1 : [bat, car]
result2 : [bat, car, dZZZZ, dance, disc]
코드
import java.util.TreeSet;
public class TreeSetTest3 {
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(new Integer(score[i]));
System.out.println("50보다 작은 값: " + set.headSet(new Integer(50)));
System.out.println("50보다 큰 값: " + set.tailSet(new Integer(50)));
System.out.println("40에서 80사이에 있는 값: " + set.subSet(40, 80));
}
}
50보다 작은 값: [10, 35, 45]
50보다 큰 값: [50, 65, 80, 95, 100]
40에서 80사이에 있는 값: [45, 50, 65]
TreeSet 범위 검색 subSet(), headSet(), tailSet()
메서드 | 설명 |
SortedSet subSet(Object fromElement, Object toElement) | 범위 검색(fromElement와 toElement 사이)의 결과를 반환한다 (끝 범위인 toElement는 범위에 포함되지 않음) |
SortedSet headSet(Object toElement) | 지정된 객체보다 작은 값의 객체들을 반환한다 |
SortedSet tailSet(Object fromElement) | 지정된 객체보다 큰 값의 객체들을 반환한다 |