Comparator & Comparable

0

Collection

목록 보기
7/11

Comparator와 Comparable 란?

  • 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스

Comparable 기본(default) 정렬 기준을 구현하는데 사용.
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용

	public interfacce Comparator {
		int compare(Object o1, Object o2); // o1, o2 두 객체를 비교
		// 0 이면 같고, 양수면 왼쪽이 크고 음수면 오른쪽이 크다
		boolean equals(Object obj); // equals를 오버라이딩 하라는 뜻
	}
	public interface Comparable {
		int compareTo(Object o); // 주어진 객체(o)를 자신과 비교
	}

예시로 Integer Class에 구현된 compareTo() 메소드를 보면

public final class Integer extends Number implements Comparable{
	public int compareTo(Integer anotherInteger){
    	int v1 = this.value;
        int v2 = anotherInteger.value;
        // 같으면 0, 오른쪽 값이 크면 -1, 작으면 1를 반환
        return (v1 < v2 ? -1 : (v1==v2? 0 : 1));
    }
}

정렬 sort() 는 두 대상을 비교 후 자리를 바꾸는 것을 반복하는 것이다.

  • compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성
String[] strArr = {"cat", "Dog", "lion", "tiger"};

Arrays.sort(strArr); // String의 Comparable 구현에 의한 정렬
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분안함
Arrays.sort(strArr, new Descending()); // 역순 정렬

정렬할 때는 정렬 대상과 기준이 존재해야 한다.
Comparable : 기본정렬기준, Comparable를 implement 한다면 기본정렬기준이 내장된것
ex)
static void sort(Object[] a); // 객체 배열에 저장된 객체가
구현한 Comparable(정렬기준)에 의한 정렬
static void sort(Object[] a, Comparator c);
// 지정한 Comparator에 의한 정렬

public final class Integer extends Number implements Comparable {
// Comparable 기본 정렬 기준 제공
// default(기본) 정렬기준이 없을 때 사용

정렬방법은 불변, 비교 기준을 잘 넣어주기만 하면 된다.

0개의 댓글