본문 바로가기
나만의 정리

자바 Comparable, Comparator

by 코리늬 2018. 7. 16.

배열이나 Collection 프레임워크에서 sort()를 사용하면 컴퓨터가 알아서 정렬을 해준다.

이 때, sort()는 Comparable 구현에 의해 정렬된 것이다.


위 같은 예제가 있을 때, Arrays.sort(sports), Arrays.sort(names)는 String의 Comparable 구현에 의해 정렬된 것이다.

Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들,

즉, String, Integer, Date, File 등이 있다.

그리고 기본적으로 오름차순 형태로 구현되도록 만들어져 있다.


ArrayList로 구현을 할 때에는 Arrays.sort()가 아닌 Collection.sort()를 사용해야한다.


이번에는 사용자가 임의로 만든 객체를 정렬할 때를 확인을 해보겠다.


위와 같이 Student라는 클래스를 만들어 리스트에 넣고, 정렬하려 했으나

The method sort(List<T>) in the type Collections is not applicable for the arguments 

에러로 인해 실행이 되지 않는다.

에러가 나는 이유는 Collection의 sort 메소드가 정렬을 위한 기준을 찾을 수 없기 때문이다.

정렬 기준을 명시하기 위한 방법으로는

1. Comparable 인터페이스 구현

2. Comparator 구현 두가지가 있다.


 - Comparable 인터페이스를 구현하여 정렬

Student 클래스에 Comparable<T> 인터페이스를 implements 해준다.

그리고 Comparable 인터페이스에 있는 compareTo 메소드를 오버라이드 해줘야한다.


compareTo는 

현재 멤버 변수 < 파라미터로 넘어온 값 >> 음수 리턴

현재 멤버 변수 = 파라미터로 넘어온 값 >> 0 리턴

현재 멤버 변수 > 파라미터로 넘어온 값 >> 양수 리턴

하도록 작성해준다.

 - Comparator 구현

Collections.sort 메소드는 두 번째 인자로 Comparator 인터페이스를 받을 수 있도록 한다.

Comparator 인터페이스의 compare 메소드를 오버라이드 하면 된다.

compare 메소드는 Comparable의 compareTo 메소드와 동일한 규칙으로 작성하면 된다.


댓글