Comparator
기본 정렬기준 외에 다른 기준으로 정렬하고 싶을 때 메소드를 제공하는 인터페이스
public interface Comparator {
// compare() 메소드
int compare(Object o1, Object o2); //o1, o2 두 객체 비교
boolean equals(Object obj); //equals를 오버라이딩하라는 뜻
}
Comparable
기본 정렬기준을 구현할 때 사용하는 메소드를 제공하는 인터페이스
public interface Comparable {
// compareTo() 메소드
int compareTo (Object o); // 주어진 객체 o 를 자신과 비교
}
Comparable을 구현하고 있는 Integer 클래스
public final class Integer extends Number implements Comparable {
public in t compareTo(Integer anotherInteger) {
int v1 = this.value;
int v2 = anotherInteger.value;
//같으면 0, 오른쪽값이 크면 -1, 작으면 1을 반환
return (v1 < v2 ? -1: (v1==v2? 0 :1));
}
}
v1 - v2 이 아닌 삼항연산자 사용하는 이유
더 간단하게 로직을 작성할 수 있지만,
삼항연산자가 기본사칙연산보다 상대적으로 빠르다 (2~3% 정도)
얼마 차이나지 않지만, 정렬 알고리즘과 같은 연산이 반복적으로 발생하는 곳에서는 가능한한 연산을 최적화하여 성능을 향상시키는 것이 중요합니다.
[참고]
[유튜브] Comparator와 Comparable
[심화]
[깃헙] 정렬 알고리즘