[Java] Comparator와 Comparable

19·2022년 11월 24일
0

Java

목록 보기
11/13
post-custom-banner

객체 정렬에 필요한 메소드(정렬기준 제공)를 정의한 인터페이스

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)
  • 첫번째는 a배열을 기본 정렬기준(오름차순)으로 정렬하는 것을 의미한다
  • 두번째는 a배열을 기본 정렬기준(오름차순)이 아닌 정렬하고자 하는 기준으로 정렬하는 것을 의미한다.

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;
    }
}
  • 기본 정렬기준이 오름차순이기 때문에, compareTo의 결과값을 -1로 곱해 역순으로 바꿔 내림차순으로 정렬하는 기준을 만든 것이다.

이런식으로 사용할 수 있을 것이다.

Arrays.sort(arr, new Descending());
  • 배열 arr를 내림차순으로 정렬
profile
하나씩 차근차근
post-custom-banner

0개의 댓글