자바에서 객체 간의 정렬 기준을 명시하는데는 두 가지 방법이 있다.
한 가지는 Comparable 인터페이스를 이용하는 것이고,
다른 한 가지는 Comparator 인터페이스를 이용하는 것이다.
'Natural Order"
보통 작은수에서 큰수로, 알파벳 순서대로, 가나다 순서대로 정렬하는 것을 의미
class Friend implements Comparable<Friend> {
private String name;
private int age;
public Friend(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Friend friend) {
//오름차순 정렬
if(this.age > friend.age) {
return 1;
} else if(this.age == friend.age) {
return 0;
} else {
return -1;
}
}
}
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
그렇다면 기본 정렬 기준과 다르게 정렬하고 싶다면?
Comparator 인터페이스 사용
class FriendSortedByName implements Comparator<Friend> {
@Override
public int compare(Friend friend1, Friend friend2) {
return friend1.name.compareTo(friend2.name);
}
}
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
Arrays.sort(배열 참조 변수, new FriendSortedByName() ), Collections.sort(컬렉션 참조 변수, new FriendSortedByName())
[Java] Comparable와 Comparator의 차이와 사용법 - Heee's Development Blog
Comparable / Comparator 인터페이스 차이점
자바 Comparable, Comparator 하면 '정렬'을 떠올려라, 자바 객체 정렬의 '기준'을 정하는 방법! (비교랑 다릅니다!)