1. Comparable과 Comparator의 목적
객체를 사용자가 정의한 정렬 기준에 맞춰 정렬해야 할 경우
ex)
2. Interface Comparable
Java에서 제공되는 정렬이 가능한 모든 클래스는 Comparable 인터페이스를 가지고 있다
compareTo()
Comparable를 이용한 객체 정렬
class Student implements Comparable<Student> {
int age;
int id;
String name;
Student(int age, int id, String name){
super();
this.age = age;
this.id = id;
this.name = name;
}
// age에 대해 오름차순, age가 같으면 id에 대해 내림차순 하기
@Override
public int compareTo(Student s){
return (this.age-s.age==0) ? s.id - this.id : this.age - s.age;
}
}
// main
List<Student> students = new ArrayList<>();
students.add(20,1,"kim");
students.add(20,3,"jung");
students.add(20,2,"lee");
students.add(21,4,"bang");
Collections.sort(students);
3. Interface Comparator
정렬 가능한 클래스들의 기본 정렬 기준과 다르게 정렬 하고 싶을 때 사용하는 인터페이스
compare()
Comparator를 이용한 객체 정렬
class Student {
int age;
int id;
String name;
Student(int age, int id, String name){
super();
this.age = age;
this.id = id;
this.name = name;
}
}
class MyComparator implements Comparator<Student>{
// age에 대해 오름차순, age가 같으면 id에 대해 내림차순 하기
@Override
public int compare(Student s1, Student s2){
return (s1.age-s2.age==0) ? s2.id - s1.id : s1.age - s2.age;
}
}
List<Student> students = new ArrayList<>();
students.add(20,1,"kim");
students.add(20,3,"jung");
students.add(20,2,"lee");
students.add(21,4,"bang");
MyComparator mc = new MyComparator();
Collections.sort(students, mc);