Comparable 기본(default) 정렬 기준을 구현하는데 사용.
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interfacce Comparator {
int compare(Object o1, Object o2); // o1, o2 두 객체를 비교
// 0 이면 같고, 양수면 왼쪽이 크고 음수면 오른쪽이 크다
boolean equals(Object obj); // equals를 오버라이딩 하라는 뜻
}
public interface Comparable {
int compareTo(Object o); // 주어진 객체(o)를 자신과 비교
}
예시로 Integer Class에 구현된 compareTo() 메소드를 보면
public final class Integer extends Number implements Comparable{
public int compareTo(Integer anotherInteger){
int v1 = this.value;
int v2 = anotherInteger.value;
// 같으면 0, 오른쪽 값이 크면 -1, 작으면 1를 반환
return (v1 < v2 ? -1 : (v1==v2? 0 : 1));
}
}
정렬 sort() 는 두 대상을 비교 후 자리를 바꾸는 것을 반복하는 것이다.
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr); // String의 Comparable 구현에 의한 정렬
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분안함
Arrays.sort(strArr, new Descending()); // 역순 정렬
정렬할 때는 정렬 대상과 기준이 존재해야 한다.
Comparable : 기본정렬기준, Comparable를 implement 한다면 기본정렬기준이 내장된것
ex)
static void sort(Object[] a); // 객체 배열에 저장된 객체가
구현한 Comparable(정렬기준)에 의한 정렬
static void sort(Object[] a, Comparator c);
// 지정한 Comparator에 의한 정렬
public final class Integer extends Number implements Comparable {
// Comparable 기본 정렬 기준 제공
// default(기본) 정렬기준이 없을 때 사용
정렬방법은 불변, 비교 기준을 잘 넣어주기만 하면 된다.