package prepare;
/*
* interface : Comparable, Comparator
* 객체의 정렬과 관련된 인터페이스(비교)
* Comparable : 클래스 내부에 객체의 정렬기준을 만들어 놓을 때 사용됨.
* Comparator : 클래스 외부에 객체의 정렬기준을 만들어 놓을 때 사용됨.
*/
public class Writer implements Comparable<Writer>{
int num;
String name;
int age;
String title;
public Writer(int num, String name, int age, String title) {
super();
this.num = num;
this.name = name;
this.age = age;
this.title = title;
}
@Override
public String toString() {
return "Writer [num=" + num + ", name=" + name + ", age=" + age + ", title=" + title + "]";
}
@Override
public int compareTo(Writer other) {
int result = this.num - other.num;//num기준 오름차순 정렬
return result;
}
}
package prepare;
import java.util.Comparator;
//Writer 클래스 name 기준으로 비교 후 정렬시켜 주는 클래스
public class WriterNameComparator implements Comparator<Writer>{
public static void main(String[] args) {
// TODO Auto-generated method stub
}
@Override
public int compare(Writer o1, Writer o2) {
int result = o1.name.compareTo(o2.name);
if(result == 0)
return o1.title.compareTo(o2.title);//2번째 정렬기준
//return o1.age - o2.age;
return result;
}
}
test
package prepare;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class WriterTest {
public static void main(String[] args) {
ArrayList<Writer> list = new ArrayList<Writer>();
list.add(new Writer(3,"tommy",35,"hello java"));
list.add(new Writer(2,"jane",45,"stop java"));
list.add(new Writer(1,"bill",40,"sing java"));
list.add(new Writer(4,"kim",22,"bye java"));
list.add(new Writer(5,"tommy",55,"good java"));
//Arrays.sort(list1);
Collections.sort(list);//list:Comparable 타입의 객체이어야 한다.
for(Writer w : list) {
System.out.println(w.toString());
}
System.out.println();
Collections.sort(list,new WriterNameComparator());
for(Writer w : list) {
System.out.println(w.toString());
}
//나이 기준 정렬 Comparator객체 지정
Collections.sort(list, new Comparator<Writer>() {
@Override
public int compare(Writer o1, Writer o2) {
return o1.age - o2.age;
}//Comparator를 impl하는 무명객체
});
}
}