본문 바로가기
Etc/Algorithm

[정렬] Comparable과 Comparator

by 달의 조각 2022. 10. 18.
객체를 서로 비교한다

 

Java에서 정렬을 할 때 흔히 Arrays.sort() 혹은 Collections.sort()을 사용한다. 이는 기본적으로 오름차순 정렬이 되어 있기 때문에 정렬 조건을 정의하기 위해서 인터페이스인 Comparable이나 Comparator를 활용해야 한다.

배열 {1, 3, 2}를 오름차순으로 정렬한다면 먼저 원소 1과 3을 비교한다. 1 - 3의 값은 음수이므로 선행 원소의 값이 더 작다는 것을 의미하고 자리를 바꾸지 않는다. 다음으로 원소 3과 2를 비교하는데, 3 - 2의 값은 양수이므로 후행 원소의 값이 더 작다는 것을 의미하여 자리를 바꾼다.

  • 양수일 경우: 자리를 변경한다.
  • 음수일 경우: 자리를 변경하지 않는다.
Arrays.sort(arr, (a, b) -> {
    return (a + b).compareTo(b + a);
});
Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) { // "1", "2"
        // 오름차순: (o2+o1).compareTo(o1+o2) (21).compareTo(12)
        // 내림차순: (o1+o2).compareTo(o2+o1)
        return (o1+o2).compareTo(o2+o1);
    }
});

 

Comparable

구현 메서드: compareTo(T o)

자기 자신과 매개변수 객체를 비교한다. 이때 차이의 크기를 따지지 않으므로 단순히 객체 A - 객체 B의 반환값이 양수, 0, 음수인지 판단한다.

a.compareTo(b);

 

comparator

구현 메서드: compare(T o1, T o2)

두 매개변수 객체를 비교한다.

// a와 관계 없이 b와 c를 비교한다
a.compare(b, c);

 

📚 Reference

댓글