리스트 같은 객체들을 인자로 받아서 TreeSet을 만들면 알아서 기본순서로(compareTo에 정의된 대로) 정렬
Set set = new TreeSet(list);
정렬기준을 바꾸고 싶다면 Comparator를 구현한 객체를 생성자로 만든후 리스트를 집어넣어줌
Set set2 = new TreeSet(new YoungOrderComparator());
set2.addAll(list);
예제 소스
import java.util.*;
public class A {
public static void main(String args[]) {
// 다섯명의 고객에 대한 배열 생성
Customer[] arr = new Customer[] {
new Customer("헤더 로클리어",1961, "Heather Deen Locklear"),
new Customer("데미 무어", 1962, "Demetria Gene Guynes"),
new Customer("안젤라 바셋", 1958, "Angela Bassett"),
new Customer("신디 크로퍼드", 1966, "Cintia Ann Crawford"),
new Customer("캐서린 제타 존스", 1969, "Catherine Jones")
};
printArray(arr, "Before Array sort Using Default sort");
// 배열을 정렬 (클래스에 정의된 기본정렬)
Arrays.sort(arr);
printArray(arr, "\nAfter Array sort Using Default sort");
// 배열을 어린 나이부터 정렬
Arrays.sort(arr, new YoungOrderComparator());
printArray(arr, "\nAfter Array sort Using YoungOrderComparator");
List list = Arrays.asList(arr); // 배열을 리스트로
Collections.shuffle(list); // 리스트의 순서를 마구 섞어 주세요.
printList(list, "\nBefore List sort Using Default sort");
// 리스트를 정렬 (클래스에 정의된 기본정렬)
Collections.sort(list);
printList(list, "\nAfter List sort Using Default sort");
// 리스트를 영문이름으로 정렬
Collections.sort(list, new EngNameComparator());
printList(list, "\nAfter List sort Using EngNameComparator");
// 디폴트 정렬할 수 있는 TreeSet을 만든다
Set set = new TreeSet(list);
System.out.println("\nAfter Making Set Using Default sort\n" + set);
// 어린 나이부터 정렬할 수 있는 TreeSet을 만든다
Set set2 = new TreeSet(new YoungOrderComparator());
set2.addAll(list);
System.out.println("\nAfter Making Set Using YoungOrderComparator\n" + set2);
}
static void printArray(Customer[] a , String title) {
System.out.println(title);
for (int i=0; i<a.length; i++)
System.out.println(a[i]);
}
// 디폴트 소팅을 위해서 Comparable 인터페이스를 구현한다.
class Customer implements Comparable {
String name;
int birthYear;
String engName;
// Constructor
public Customer(String name, int birthYear, String engName) {
this.name = name;
this.birthYear = birthYear;
this.engName = engName;
}
// Object의 toString 메소드 overriding.. 객체의 문자적 표현
public String toString() {
return name + "(" + engName + ") " + birthYear + "년생";
}
// Comparable 인터페이스를 구현한 클래스에서 반드시 overriding 해야만 하는 비교 메쏘드
public int compareTo(Object o) {
// String의 compareTo 메소드를 호출(사전순서적( lexicographically)으로 비교)
return name.compareTo(((Customer)o).name);
}
}
// 젊은 순서대로 정렬하기 위해 Comparator 인터페이스를 구현
class YoungOrderComparator implements Comparator {
public int compare(Object o1, Object o2) {
int by1 = ((Customer)o1).birthYear;
int by2 = ((Customer)o2).birthYear;
return by1 > by2 ? -1 : (by1 == by2 ? 0 : 1); // descending 정렬.....
}
}
// 영문이름으로 정렬하기 위해 Comparator 인터페이스를 구현
class EngNameComparator implements Comparator {
public int compare(Object o1, Object o2) {
String en1 = ((Customer)o1).engName;
String en2 = ((Customer)o2).engName;
return en1.compareTo(en2); // ascending 정렬
}
}
3. 중복 제거하고 정렬하기
Treeset 사용
public class TSetTest {
public static void main(String[] args) {
String str = "가,나,다,다,라, 마, 바, 사,라";
TreeSet tset = new TreeSet();
String[] tokens = str.split(",");
for(int i = 0; i < tokens.length; i++) {
tset.add(tokens[i]);
}