본문 바로가기

비트교육센터[전문가반]

Comparable<T> 인터페이스

Comparable 인터페이스는 객체를 정렬하는 데 사용되는 메소드인 compareTo() 메소드를 정의하고 있습니다.

Comparable 인터페이스를 구현하면 객체들의 배열을 손쉽게 정렬할 수 있습니다. (Comparable 인터페이스를 쓰는 목적)

 

compareTo() 함수에는 위에서 설명하는바와 같이 "문자열의 비교"  "숫자의 비교" 두 방식이 존재한다.

 

숫자의 비교 같은 경우는 단순히 크다(1), 같다(0), 작다(-1) 의 관한 결과값을 리턴해주는

반면 문자열의 비교 같은 경우는 같다(0), 그 외 양수/음수값 을 리턴한다.

 

ex. 숫자비교

package collection_numSort

 

public class Grade implements Comparable<Grade>{ //Comparable 인터페이스는 compareTo()라는 메소드를 가진다.

 

   int number;

   String grade;

 

   public Grade(int number, String grade) {

   this.number = number;

   this.grade = grade;

   }

 

   public String toString() {

     return grade;

   }

 

   @Override

   public int compareTo(Grade g) { //객체를 서로 비교하기 위한 메서드이다.

   // TODO Auto-generated method stub

   //return number - g.number;

   => 기본 데이터 타입이기때문에 compareTo 메소드를 사용할수없다. 뺄셈을 함으로서 비교리턴

       (앞에 값이 크면 양수, 뒤에 값이 크면 음수)

   return Integer.compare(number, g.number);

   }

 

}

 

package collection_numSort;

 

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

 

public class SortTest {

public static void main(String[] args) {

   Grade array[] = {

     new Grade(20130001, "A+"),

     new Grade(20130002, "C+"),

     new Grade(20130003, "B+"),

     new Grade(20130004, "D")

     };

 

   List<Grade> list = Arrays.asList(array);

   Collections.sort(list); //객체를 sort(정렬)하기 위해서는 반드시 compareTo메소드를 재정의 해주어야 한다.

   System.out.println(list);

   }

}

 

ex. 문자열 비교

 

package collection2_gradeSort

 

public class Grade implements Comparable<Grade>{ //Comparable 인터페이스는compareTo()라는메소드를가진다.

 

   int number;

   String grade;

 

   public Grade(int number, String grade) {

   this.number = number;

   this.grade = grade;

   }

 

   public String toString() {

   return grade;

   }

 

   @Override

   public int compareTo(Grade g) { //객체를 서로 비교하기 위한 메서드이다.

   // TODO Auto-generated method stub

     return grade.compareTo(g.grade); //두개의 객체의 grade값을 비교하는 작업 

   }

 

}

 

(메인은 동일)

 

정리

 

 

참고 블로그

mine-it-record.tistory.com/133

icarus8050.tistory.com/10

www.tcpschool.com/java/java_collectionFramework_comparable