객체 정렬에 필요한 메소드(정렬기준 제공)를 정의한 인터페이스
Comparable 기본 정렬기준을 구현하는데 사용
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
Comparable 인터페이스는 int compareTo(Object o) 메소드를 제공하고,
Comparator 인터페이스는 int compare(Object o1, Object o2) 메소드를 제공한다.
위 두 메소드는 int를 반환하는데, 양수(+)면 왼쪽 매개변수가 큰거고, 음수(-)면 오른쪽 매개변수가 큰 것이다.
compareTo는 자신과 비교하는 것이기에, 양수(+)면 비교하는 값보다 큰거고, 음수(-)면 비교하는 값보다 작은것이다.
Comparable은 Integer와 같은 Wrapper 클래스들, String같은, 같은 타입의 인스턴스끼리 비교할 수 있는 클래스들에 오름차순으로 정렬되도록 구현되어 있다.
Comparator를 통해서 기본 정렬기준 이외에 정렬하고자 하는 기준을 구현해서 정렬할 수 있다.
Arrays의 sort() 메소드를 보면
static void sort(Object[] a)
static void sort(Object[] a, Comparator c)
Comparator 구현 예시)
class Descending implements Comparator {
public int compare(Object o1, Object o2) {
if (o1 instanceof Comparable && o2 instanceof Comparable) {
Comparable c1 = (Comparable)o1;
Comparable c2 = (Comparable)o2;
return c1.compareTo(c2) * -1;
}
return -1;
}
}
이런식으로 사용할 수 있을 것이다.
Arrays.sort(arr, new Descending());