코테문제 풀어보다가 관련해서 나왔길래 한 번 정리해봅니다.
오늘 비교해 볼건 모두 인터페이스이다.
그렇기에 사용하려면, 해당 인터페이스 안에 구현되어있는 메서드 역시 구현해줘야만 한다.
class test implements Comparable<test>{
...
}
Class Test implements Comparable<Test>{
int score;
int rank;
Test(int score, int rank){
this.score = score;
this.rank = rank;
}
@Override
public int compareTo(Test t){
// 만약 내 점수가 변수로 들어온 객체의 점수보다 높다면 양수가 반환될 것이고, 낮다면 음수가 반환될 것이다.
// 꼭 이렇게 하지 않아도, 1, 0, -1 을 조건에 맞춰서 반환해줘도 된다.
return this.score - t.score;
}
}
Test [] arr = new Test[3];
arr[0] = new Test(10, 3);
arr[1] = new Test(20, 1);
arr[2] = new Test(15, 2);
Arrays.sort(arr); // sort!
ArrayList<Test> list = new ArrayList<>();
list.add(new Test(10, 3));
list.add(new Test(20, 1));
list.add(new Test(15, 2));
Collections.sort(list); // sort!
// 익명 클래스 생성
Comparator<Test> rankComparator = new Comparator<Test>(){
@Override
public int compare(Test t1, Test t2){
if(t1.rank < t2.rank){return 1;}
else if(t1.rank == t2.rank){return 0;}
else return -1;
}
}
Test [] arr = new Test[3];
arr[0] = new Test(10, 3);
arr[1] = new Test(20, 1);
arr[2] = new Test(15, 2);
Arrays.sort(arr, rankComparator); // sort!
ArrayList<Test> list = new ArrayList<>();
list.add(new Test(10, 3));
list.add(new Test(20, 1));
list.add(new Test(15, 2));
Collections.sort(list, rankComparator); // sort!
한 가지 정렬 규칙을 설정하는 목적
으로 사용정렬 규칙 그 자체
를 의미, 기본 정렬 규칙과 다른 정렬 규칙을 사용해서 정렬하고 싶을 때 사용