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
'비트교육센터[전문가반]' 카테고리의 다른 글
선형 자료 구조 _ 연접 리스트(배열) (0) | 2021.02.15 |
---|---|
테트리스 (2인용) (0) | 2021.02.15 |
compareTo(), equal() 메서드 (0) | 2021.02.05 |
HashMap 데이터 입력, 출력 (0) | 2021.02.05 |
HashSet에서 중복 데이터 처리(equals()) (0) | 2021.02.05 |