람다식를 이용한 Arrays.sort 재정의한 정렬을 블로그 글을 참고하여 공부하던 도중, comparable과 compareTo와 차이에 대해 다시 공부할만한 좋은 글을 발견하여 해당 블로그를 참고하여 공부하고자 한다.
Comparable
은 자기 자신과 매개변수 객체를 비교하는 것이고,Comparator
는 두 매개변수 객체를 비교한다.
public class Person implements Comparable<Person> {
//person 객체와 다른 person 객체를 비교해야 되기 때문에 T 대신 Person
int age;
int month;
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
//compareTo는 자기 자신과 대상 객체와의 차를 정수로 반환
Person (int age, int month){
this.age = age;
this.month = month;
}
public static void main(String[] args) {
Person p1 = new Person(10,3);
Person p2 = new Person(30,2);
int result = p1.compareTo(p2);
//p1(자기 자신)과 p2(다른 객체)를 비교
if(result>0){
System.out.println("p1이 더 크다.");
} else if (result==0) {
System.out.println("p1과 같다");
}else {
System.out.println("p2가 더 크다.");
}
}
}
자기 자신
을 기준으로 상대방과의 차이 값
을 비교하여 반환한다.정수
로 반환한다.자기 자신과 비교 대상의 차>0
: 자기 자신이 더 큰 수이므로 정렬한다.자기 자신과 비교 대상의 차<0
: 자기 자신이 더 작은 수이므로 정렬하지 않는다.Comparable
를 implements
하는 구현체가 있어야 한다.익명객체
를 생성하여 Comparator를 구현해야 한다.
자기 자신과 비교 대상의 차>0
: 자기 자신이 더 큰 수이므로 다시 정렬한다.자기 자신과 비교 대상의 차<0
: 자기 자신이 더 작은 수이므로 정렬하지 않는다.
두 값의 차>0
이라면 이를 음수로 바꿔 반환해주고(정렬하기 위함), 만약 음수가 된다면 그 값을 양수로 바꾸어 반환해준다.(정렬하지 않음)// Comparable
public int compareTo(Object o) {
return o.value - this.value; // == -(this.value - o.value);
}
// Comparator
public int compare(Object o1, Object o2) {
return o2.value - o1.value; // == -(o1.value - o2.value);
}
String 클래스
에 Comparable을 implements하여 compareTo() 메소드를 구현하고 있기 때문에 문자열 비교가 가능하다!참고
https://st-lab.tistory.com/243
https://st-lab.tistory.com/110#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98