public interface Comparator{
int compare(Object o1, Object o2); // o1, o2 두 객체를 비교
boolean equals(Object obj);
}
public interface Comparable{
int compareTo(Object o); // 주어진 객체(o)를 자신(this)과 비교
}
static void sort(Object[] a) // 객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) // 지정한 Comparator에 의한 정렬
class Ex11{
public static void main(String[] args){
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr); // String의 comparable구현에 의한 정렬
System.out.println("strArr=" + Arrays.toString(strArr));
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분 안함
System.out.println("strArr=" + Arrays.toString(strArr));
Arrays.sort(strArr, new Descending()); // 역순 정렬
System.out.println("strArr=" + Arrays.toString(strArr));
}
}
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; // -1을 곱해서 기본 정렬방식의 역으로 변경
// return c2.compareTo(c1) // 위와 같은 결과
}
return -1;
}
}
정리