11-30~33 Comparator, Comparable

oyeon·2020년 12월 24일
0

Java 개념

목록 보기
31/70
  • 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
    Comparator : 기본 정렬기준(사전순) 외에 다른 기준으로 정렬하고자 할 때 사용
    Comparable : 기본 정렬기준(사전순)을 구현하는데 사용
public interface Comparator{
    int compare(Object o1, Object o2);	// o1, o2 두 객체를 비교
    boolean equals(Object obj);
}
public interface Comparable{
    int compareTo(Object o);	// 주어진 객체(o)를 자신(this)과 비교
}
  • compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성
static void sort(Object[] a)	// 객체 배열에 저장된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c)	// 지정한 Comparator에 의한 정렬
  • 예제
class Ex11{
   public static void main(String[] args){
      String[] strArr = {"cat", "Dog", "lion", "tiger"};

      Arrays.sort(strArr);	// String의 comparable구현에 의한 정렬
      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;	// -1을 곱해서 기본 정렬방식의 역으로 변경
         // return c2.compareTo(c1)	// 위와 같은 결과
      }
      return -1;
   }
}

정리

  • 정렬 로직은 불변(가져다 쓰면 됨). 정렬 기준은 가변(내가 할 것).
profile
Enjoy to study

0개의 댓글