728x90
본 내용은 자바의 정석 3rd Edition을 참고하여 작성되었습니다. 개인적으로 학습한 내용을 복습하기 목적이기 때문에 내용상 오류가 있을 수 있습니다.
Comparator
과 Comparable
이란?
이전에 본 Arrays.sort()
는 호출만 하면 알아서 배열을 정렬하는 것처럼 보였지만 사실은 Character
클래스의 Comparable
의 구현에 의해 정렬된 것이다. Comparator
, Comparable
는 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의 하고 있으며, Comparable
을 구현하고 있는 클래스 들은 같은 타입의 인스턴스끼리 비교할 수 있는 클래스들, 주로 Integer
와 같은 Wrapper
클래스와 String
, Date
, File
과 같은 것들 이며 기본적으로 오름차순으로 정렬 되도록 구현되어 있다.
Comparable
: 기본 정렬기준을 구현하는데 사용
Comparator
: 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용
Comparator
, Comparable
예제
Arrays.sort()
는 배열을 정렬할 때,Comparator
를 지정해주지 않으면 저장하는 객체에 구현된 내용에 따라 정렬된다.static void sort(Object[] o)
: 객체 배열에 저장된 객체가 구현한Comparable
에 의한 정렬static void sort(Object[] o, Comparator c)
: 지정한Comparator
에 의한 정렬
String
의Comparable
구현은 문자열이 사전 순으로 정렬되도록 작성되어 있다.- 위의 예제와 같이 대소문자를 구분하지 않고 비교하는
Comparator
를 상수의 형태로 제공한다.
- 위의 예제와 같이 대소문자를 구분하지 않고 비교하는
String
의 기본정렬형태를 반대로하는 것, 즉 내림차순으로 구현하는 방법은 간단하다.String
에 구현된compareTo()
의 결과에 -1을 곱하기만 하면된다.- 또는 비교하는 객체의 위치를 바꿔서
c2.compareTo(c1)
과 같이 해도 된다. compare()
의 매개변수 타입이Object
이기때문에compareTo()
를 바로 호출할 수 없으므로 먼저Comparable
로 형변환을 꼭 해주어야한다.
댓글을 사용할 수 없습니다.