null 입력은 가능하지만 한 번만 저장 가능하고 중복될 수 없습니다.
객체(데이터)를 중복 저장할 수 없습니다.
이진 검색 트리(Binary Search Tree) 구조를 기반으로 하여 자동으로 오름차순으로 데이터를 정렬합니다.
내부적으로 TreeMap을 사용합니다.
package chapter20230905.TreeSet;
import java.util.*;
public class TreeSet_01 {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("홍길동");
treeSet.add("강감찬");
treeSet.add("이순신");
treeSet.add("강감찬");
for(String str : treeSet) {
System.out.println(str);
}
// 오름차순으로 정렬되어 출력 , 중복값은 저장안됨
/*
강감찬
이순신
홍길동
*/
}
}
정렬을 변경하는 방법.
a.compareTo(b) :
현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
현재 객체 == 파라미터로 넘어온 객체: 0 리턴
현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
compare(a, b)
첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.
일반적으로 Comparator 인터페이스 보다는 Comparable 인터페이스를 더 많이 사용.
다만 어떤 클래스가 이미 Comparable 인터페이스를 구현한 경우에 이 클래스의 정렬 방식을 정의할 때 Comparator 인터페이스를 사용.
String 클래스가 Comparable 인터페이스를 구현했고, compareTo() 메서드는 오름차순을 구현.
package chapter20230905.TreeSet;
import java.util.*;
class MyCompare implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return (s1.compareTo(s2)) * -1 ; // String 클래스의 compareTo() 메서드를 반대로
}
}
public class TreeSet_02 {
public static void main(String[] args) {
// Set<String> set = new TreeSet<String>();
// TreeSet 생성자에 Comparator를 구현한 객체를 매개변수로 전달함
// String 클래스를 수정할 수 없으니 TreeSet 생성자에 넘김.
Set<String> set = new TreeSet<>();
set.add("aaa");
set.add("ccc");
set.add("bbb");
System.out.println(set); // [aaa, bbb, ccc]
}
}