https://dev-daddy.tistory.com/23 [대한민국 개발자 아빠] 블로그를 보고 정리한 내용입니다.
Comparable과 Comparator 인터페이스는 모두 객체를 정렬하는데 사용되는 인터페이스이다. 두 개의 차이점은 다음과 같다.
1. 객체를 정렬하기 위해 오버라이드하는 메소드가 다르다.
먼저 Comparable 사용법을 알아보자. Friend객체를 나이순으로 정렬하도록 compareTo(T o)를 구현한다.
public 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 o) {
return this.age - o.age;
}
}
public class FriendTest {
@Test
public void test_SortListWithComparable() throws Exception {
Friend kim = new Friend("Kim", 36);
Friend park = new Friend("Park", 20);
Friend lee = new Friend("Lee", 28);
Friend yong = new Friend("Yong", 18);
Friend[] friends = {kim, park, lee, yong};
Arrays.sort(friends);
assertEquals(yong, friends[0]);
assertEquals(park, friends[1]);
assertEquals(lee, friends[2]);
assertEquals(kim, friends[3]);
}
}
Friend를 나이순으로 정렬하였는데 만약 이름순으로 정렬하고 싶을때는 Comparator를 사용하면 된다.
class SortFriendByNameInAsc implements Comparator<Friend>{
@Override
public int compare(Friend o1, Friend o2) {
return o2.name.compareTo(o1.name);
}
}
@Test
public void test_SortListWithComparator() throws Exception {
Friend kim = new Friend("Kim", 36);
Friend park = new Friend("Park", 20);
Friend lee = new Friend("Lee", 28);
Friend yong = new Friend("Yong", 18);
List<Friend> friends = new ArrayList<>();
friends.add(kim);
friends.add(park);
friends.add(lee);
friends.add(yong);
Collections.sort(friends, new SortFriendByNameInAsc());
assertEquals(kim, friends.get(0));
assertEquals(lee, friends.get(1));
assertEquals(park, friends.get(2));
assertEquals(yong, friends.get(3));
}
출처: https://dev-daddy.tistory.com/23 [대한민국 개발자 아빠]
https://namocom.tistory.com/871