<T extends Comparable<? super T>> void sort (List<T> List)에 해당하는 interface Comparable의 정보이다. Comparable의 하위객체들만 사용이 가능하기 때문에 아무런 연관도 없는 객체에 사용할 수 없어, 구현을 진행해 주어야 사용할 수 있다.
그리고 interface를 구현했기 때문에 모든 method를 구현해주어야한다.
compareTo(T other) --> 비교할 객체를 입력해주면된다.
other에는 나랑 비교대상이 되는 비교객체와 비교대상이 되는 다른 값을 입력해주면된다.
구현 : {(X, Y) such that X.compareTo(Y) <=0 }
결과값에 따라서 오름차순, 내림차순이 다르다.
0보다 큰값으로 나오는 경우 X의 값이 더 높다. 이 객체의 점수가 높다.
0이 나오는 경우 점수가 같다.
0보다 작은 값으로 나오는 경우 Y의 값이 더 높다. 이 객체의 점수가 낮다.
오름차순의 경우 양의 점수일 때 숫자를 바꾼다.
내림차순으로 원할 경우 결과를 -로
오름차순을 원할 경우 결과를 +로 진행해주면 된다.
그리고 Collections.sort(출력할 객체의 주소값을 포함하고 있는 참조변수)를 입력해주고, 출력하면 된다.
배열이나 List에 저장된 객체를 정렬하기
클래스가 Comparable<T>인터페이스를 구현한다.
클래스가 Comparable<T>인터페이스를 구현할 수 없는경우.
public class Score{
List<Score> list = new ArrayList<>();
list.add(Score);
list.add(Score);
list.add(Score);
list.add(Score);
Collections.sort(list);//오류발생! 컴파일 실패
Collections.sort(list, 비교기 객체 ); //비교할 객체가 필요하다, 어떻게 만들면 될까?
비교기 객체 구현을 위한 인터페이스 만들기!
1. 익명클래스를 만든다. 한번만 사용하고 말 객체를 의미한다.
Compare<Score> totalComparator = new Comparator<>(){
public int compare(Score score1, Score score2) {
return score1.getTotal() - score2.getTotal();}
};
2. 익명클래스를 람다식표현방식으로 사용한다.
빨간부분만 입력하면, 자동으로 JVM에서 sort의 매개변수를 2개짜리 인것을 확인, comparator의 구현채인 것을 확인, 매개변수 2개고 반환타입이 int인 것을 확인한다.
지금여기서 앞에 Compare부분이 그림판으로 입력하면서 짤렸다. Comparator부분이 작성되어있었다.