Comparable : 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스이다.
정렬할 객체에 Comparable interface를 implements 후, compareTo() 메서드를 오버라이드 한다.
Arrays.sort(array) -> 배열 정렬, Collections.sort(list) -> List Collection로 정렬할 수 있다.
// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
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;
}
}
// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);
// 출처 : https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
Comparator : 정렬 가능한 클래스들의 기본 정렬 기준과 다르게 정렬하고 싶을 때 사용하는 인터페이스.
Comparator interface를 implements 후 compare() 메서드를 오버라이드한 myComparator class를 작성한다.
주로 내림차순으로 정렬할 때 많이 사용한다.
Arrays.sort(arr, myComparator), Collections.sort(list, myComp) 로 사용할 수 있는데, 두 번째 인자로 Comparator interface를 받을 수 있다.
// 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;
}
}
// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
MyComparator myComparator = new MyComparator();
Collections.sort(pointList, myComparator);
// 출처 : https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
Comparator<Point> myComparator = new Comparator<Point>() {
@Override
public int compare(Point p1, Point p2) { 위와 동일 }
};
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList, myComparator);
// 출처 : https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html