Leonardo Go

Comparable와 Comparator 인터페이스 오버라이딩(1) 본문

Programming/Java

Comparable와 Comparator 인터페이스 오버라이딩(1)

Leonardo Go 2011. 8. 30. 17:44


1. 정의

두 객체를 비교하는 목적을 가지고 있다.

Comparable - 기본 정렬기준을 구현하는데 사용.   java.lang패키지
Comparator - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용   java.util패키지

두 객체를 비교하여 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 반환하도록 한다.

Comparable 은 compareto() 메소드
Comparator 는 compare() 메소드


2. 인터페이스

public interface Comparator{
      int compare(Object o1, Object o2);
      boolean equals(Object obj);
}

public interface Comparable{
      public int compareTo(Object o);
}


3. 예제

class ComparatorEx1
{
public static void main(string[] args){
         TreeSet set1 = new TreeSet();
         TreeSet set2 = new TreeSet(new Descending());

         int[] score = {30, 50, 10, 20, 40};

         for(int i = 0 ;i < score.length; i++){
                  set.add(new Integer(score[i])); 
                  set2.add(new Integer(score[i]));
         }
         System.out.println("set1 :" + set1);
         System.out.println("set2 :" + set2);
}
}

class Descendgin 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;
       }
}

실행결과
set1 : [10, 20, 30, 40, 50]
set2 : [50, 40, 30, 20, 10]

 
TreeSet은 데이터를 정렬된 상태로 저장 한다. TreeSet을 생성할때 Comparator를 지정해주지 않으면 저장하는 객체주로 comparable을 구현한 클래스의 객체에 구현된 정렬방식에 따라 정렬하여 저장하게 된다. 그러나 Comparotor를 지정해주면 지정된 Comparator에 구현된 정렬방식에 따라 정렬하게 저장한다.