객체를 서로 비교한다
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
'Etc > Algorithm' 카테고리의 다른 글
[Java] 프로그래머스: 게임 맵 최단 거리 (0) | 2022.11.20 |
---|---|
[Algorithm] 그래프 탐색 - BFS / DFS (0) | 2022.11.19 |
[Java] 프로그래머스 : K번째수 (0) | 2022.10.11 |
[Java] 프로그래머스 : 위장 (0) | 2022.10.10 |
[Java] 프로그래머스 : 전화번호 목록 (0) | 2022.10.09 |
댓글