정렬을 변경하는 방법.
a.compareTo(b) :
현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
현재 객체 == 파라미터로 넘어온 객체: 0 리턴
현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
compare(a, b)
첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.
일반적으로 Comparator 인터페이스 보다는 Comparable 인터페이스를 더 많이 사용.
다만 어떤 클래스가 이미 Comparable 인터페이스를 구현한 경우에 이 클래스의 정렬 방식을 정의할 때 Comparator 인터페이스를 사용.
String 클래스가 Comparable 인터페이스를 구현했고, compareTo() 메서드는 오름차순을 구현.
package chapter20230907;
import java.util.*;
class Student implements Comparable<Student> { // Comparable Student타입으로 구현함
int num;
String name;
public Student(int num, String name) {
this.num = num;
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public int compareTo(Student student) { // compareTo 메서드 구현
return (this.num - student.num) * -1;
}
/*
처음 this.num 에는 아무것도 없으므로 0 그리고 student.num에 new Student(2, "김철수") 를 넣음
(0 - 2) * -1 = 2
그 다음 (2 - 3) * -1 = 1 -> 이철수 , 김철수
그 다음 (3 - 1) * -1 = -2 -> 이철수 보다 작음
그 다음 (2 - 1) * -1 = -1 -> 김철수 보다 작음
그래서 이철수 김철수 박철수
양수는 오름차순 정렬 음수는 내림차순 정렬
*/
}
public class test02 {
public static void main(String[] args) {
Student[] array = {
new Student(2, "김철수"),
new Student(3, "이철수"),
new Student(1, "박철수")
};
List<Student> list = Arrays.asList(array);
Collections.sort(list);
System.out.println(list);
}
}