728x90
참고: https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
Comparable과 Comparable 모두 인터페이스이다.
그러므로, 사용하고자 한다면 인터페이스 내에 선언된 메소드를 반드시 구현해야한다.
Comparable 인터페이스는 compareTo 메소드를 구현해야하고, Comparator 인터페이스를 쓰려면 compare 메소드를 구현해야 한다.
역할은 비슷하지만 차이가 있다.
Comparable의 compareTo(T o) 메소드는 파라미터가 한개이고, Comparator의 compare(T o1, T o2) 메소드는 파라미터가 두개이다.
Comparable의 경우 자기 자신관 매개변수 객체를 비교하고, Comparator는 두 매개변수 객체를 비교하는 것이다.
비교 대상이 다른 것이다.
객체 비교의 결과나 return이 양수일 때, 두 객체의 순서가 바뀐다.
Comparable 인터페이스의 경우,
class Point implements Comparable<Point> {
int x, y;
@Override
public int compareTo(Point p) {
if(this.x > p.x) {
return 1; // x에 대해서는 오름차순
}
else if(this.x == p.x) {
if(this.y < p.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
}
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
Comparator의 경우,
// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
class MyComparator implements Comparator<Point> {
@Override
public int compare(Point p1, Point p2) {
if (p1.x > p2.x) {
return 1; // x에 대해서는 오름차순
}
else if (p1.x == p2.x) {
if (p1.y < p2.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
}
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
Arrays.sort와 함께 사용하는 예시,
Arrays.sort(arr2, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
728x90
'IT지식 > 알고리즘' 카테고리의 다른 글
[알고리즘] 이분탐색 알고리즘 (0) | 2022.12.26 |
---|---|
[알고리즘] 백트래킹에 대해 공부해보자 (0) | 2022.12.19 |
[알고리즘] DFS, BFS 구현 (백준) (0) | 2022.11.29 |