Comparable
- 정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓는 인터페이스
- 패키지:
java.lang.Comparable
-> import 해 줄 필요 없다.
- 자기자신과 매개변수 객체를 비교하는 compareTo 메소드를 재정의 해줘야 한다.
- 자바에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며, 정렬시에 Comparable의 구현 내용에 맞춰 정렬이 수행된다.
import java.util.*;
class Solution {
List<Stage> st = new ArrayList<>();
Collections.sort(st, Collections.reverseOrder());
class Stage implements Comparable<Stage> {
public int idx;
public double fail;
public Stage(int idx, double fail) {
this.idx = idx;
this.fail = fail;
}
@Override
public int compareTo(Stage o) {
if(fail < o.fail) return -1;
if(fail > o.fail) return 1;
return 0;
}
}
}
Comparator
- 정의: 정렬 가능한 클래스(=Comparable이 구현된 클래스)들의 기본 정렬 기준과는 다른 방식으로 정렬하고 싶을 때 사용하는 클래스이다.
- 두 매개변수 객체를 비교한다.
- 패키지:
java.util.Comparator
- 주로 익명클래스(new Comparator(){ ... })로 사용되며, 기본적으로 오름차순이 정렬 기준인 것을 내림차순으로 정렬하는 등의 용도로 사용된다.
import java.util.*;
class Solution {
List<Stage> st = new ArrayList<>();
Collections.sort(st, new Comparator<Stage>() {
@Override
public int compare(Stage s1, Stage s2) {
if (s1.fail > s2.fail) return -1;
else if (s1.fail < s2.fail) return 1;
return 0;
}
});
class Stage implements Comparator<Stage> {
public int idx;
public double fail;
public Stage(int idx, double fail) {
this.idx = idx;
this.fail = fail;
}
@Override
public int compare(Stage s1, Stage s2) {
if(s1.fail > s2.fail) return 1;
if(s1.fail < s2.fail) return -1;
return 0;
}
}
}
Ref. https://m.blog.naver.com/occidere/220918234464