1.7 Comparator, Comparable
Arrays.sort() 호출시 배열을 정렬하나, 사실은 Character 클래스의 Comparable의 구현에 의해 정렬됨.
Comparator, Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의함.
- Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용.
- Comparable : 기본 정렬기준을 구현하는데 사용.
package Collection_Framework;
import java.util.*;
public class comparator1 {
public static void main(String []arge) {
String[] strArr = {"cat","dog", "lion","tiger"};
Arrays.sort(strArr);
System.out.println("strArr=" + Arrays.toString(strArr));
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER);
System.out.println("strArr=" + Arrays.toString(strArr));
Arrays.sort(strArr, new Descending());
System.out.println("strArr=" + Arrays.toString(strArr));
}
}
class Descending implements Comparator{
public int compare(Object o1, Object o2) {
if(o1 instanceof Comparable && o2 instanceof Comparable) {
Comparable c1 = (Comparable)o1;
Comparable c2 = (Comparable)o2;
return c1.compareTo(c2)*-1;
}
return -1;
}
}
출력결과 :
strArr=[cat, dog, lion, tiger]
strArr=[cat, dog, lion, tiger]
strArr=[tiger, lion, dog, cat]
* String의 Comparable 구현은 문자열이 사전순으로 정렬됨. 오름차순 정력은 공백, 숫자, 대문자, 소문자 순으로 정렬됨.
즉, 유니코드 순서가 작은값에서 큰값으로 정렬됨.
* 대소문자를 구분하지 않고 비교하는 Comparator를 상수의 형태로 제공.
public static final Comparator CASE_INSENSITIE_ORDER
> Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); 사용시 대소문자 구분없이 정렬가능.
* 내림차순 정렬
String에 구현된 compareTo()의 결과에 -1을 곱하기만 하면 된다. 비교하는 객체의 위치를 바꿔서 c2.compareTo(c1)과 같이 해도 된다.
매개변수가 Object타입이기 때문에, compareTo()를 바로 호출 할수 없으므로 Comparable로 형변환 해야 한다.
class Descending() 참고.
'Study > Java' 카테고리의 다른 글
Collection Framwork 1.3 LinkedList (0) | 2018.03.05 |
---|---|
Collection Framework 1.2 ArrayList (0) | 2018.03.05 |
java.time 패키지를 이용하여 달력 만들기 (0) | 2018.03.05 |
Collection Framework 1.6 Arrays (2) | 2018.02.26 |
Collection Framework 1.5 lterator, Listlterator, Enumeration (0) | 2018.02.26 |