java - Comparable과 Comparator의 차이점

dawn·2021년 4월 20일
0

자바

목록 보기
7/9

https://dev-daddy.tistory.com/23 [대한민국 개발자 아빠] 블로그를 보고 정리한 내용입니다.

차이점

Comparable과 Comparator 인터페이스는 모두 객체를 정렬하는데 사용되는 인터페이스이다. 두 개의 차이점은 다음과 같다.
1. 객체를 정렬하기 위해 오버라이드하는 메소드가 다르다.

  • Comparable 인터페이스는 int compareTo(T o) 메소드를 사용하여 객체를 정렬한다.
  • Comparator 인터페이스는 int compare(T o1, T o2) 메소드를 사용하여 객체를 정렬한다.
  1. Comparable은 기본적인 정렬위주일 때 사용하고 특정한 규칙을 사용해 정렬을 하고 싶을 때는 Comparator를 사용하면 된다.

Comparable

먼저 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]);
    }
}

Comparator

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

profile
안녕하세요

0개의 댓글