반응형
Comparator 와 Comparable
객체 정렬에 필요한 메서드(정렬 기준 제공)를 정의한 인터페이스.
- Comparator : 기본 정렬 기준을 구현하는데 사용
- Comparable : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용
public interface Comparator{
int compare(Object o1, Object o2){
//결과가 0 이면 같은 것.
//양수면 왼쪽이 더 크다, 음수면 오른쪽이 더 크다.
boolean equals(Object obj);
}
public interface Comparable{
int compareTo(Object o); //자기 자신과 비교
}
-compare()와 compareTo()는 두 객체의 비교 결과를 반환하도록 작성,
같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+).
Integer와 Comparable
Integer, String 등 정렬이 가능한 클래스는 기본적으로 정렬 기준을 갖고 있다.
public final class Integer extends Number implements Comparable{
....
public int compareTo(Object o){
return compareTo((Integer)o);
}
public int compareTo(Integer anotherInteger){
int thisVal = this.value;
int anotherVal = anotherInteger.value;
//비교하는 값이 크면 -1, 같으면 0, 작으면 1을 반환한다.
return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
}
쉽게 생각해서 뺄셈이라고 생각하면 된다.
A - B를 했을 때 0이 나오면 => A = B,
음수가 나오면 => A<B
양수가 나오면 => A>B
자바의 정석 연습문제 예제
import java.util.*;
class Student {
String name;
int ban;
int no;
int kor,eng,math;
Student(String name,int ban,int no, int kor, int eng, int math){
this.name=name;
this.ban=ban;
this.no=no;
this.kor=kor;
this.eng=eng;
this.math=math;
}
int getTotal() {
return kor+eng+math;
}
float getAverage() {
return (int)((getTotal()/3f)*10+0.5)/10f;
}
public String toString() {
return name+","+ban+","+no+","+kor+","+eng+","+math
+","+getTotal()+","+getAverage();
}
}
public class Exercise11_5 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new Student("홍길동",1,1,100,100,100));
list.add(new Student("남궁성",1,2,90,70,80));
list.add(new Student("김자바",1,3,80,80,90));
list.add(new Student("이자바",1,4,70,90,70));
list.add(new Student("안자바",1,5,60,100,80));
Collections.sort(list);
Iterator it=list.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
Comparable 인터페이스를 구현하도록 변경해서
이름(name)이 기본 정렬이 기준이 되도록,
실행 결과가 이렇게 나오도록 해보기
김자바,1,3,80,80,90,250,83.3
남궁성,1,2,90,70,80,240,80.0
안자바,1,5,60,100,80,240,80.0
이자바,1,4,70,90,70,230,76.7
홍길동,1,1,100,100,100,300,100.0
Comparable 인터페이스 구현
class Student implements Comparable{
String name;
int ban;
int no;
int kor,eng,math;
Comparable 인터페이스에는 comepareTo()메서드가
정의되어 있고 이 메서드는 정렬기준을 제공한다.
public int compareTo(Object o) {
if(o instanceof Student) {
Student tmp=(Student)o;
return name.compareTo(tmp.name); //String 클래스의 compareTo() 호출
}else {
return -1;
}
}
반응형
'📒 education archive > 🎀JAVA' 카테고리의 다른 글
[국비학원 기록/자바] 스캐너, 2차원 배열 활용한 학생 5명의 성적 출력 프로그램 구현하기 (0) | 2021.12.02 |
---|---|
자바 공부 기록(16)-HashSet 예제 , 잘 섞이지 않는 배열 ArrayList에 옮겨 담기 (0) | 2021.11.16 |
[국비학원 기록/자바] 연결 리스트(Linked List) 종류, 구현, 노드 중간 데이터 추가 (0) | 2021.11.07 |
[국비학원 기록/자바] 스레드02. 제어 메서드, join(),interrupt(),wait(),notify(),notifyAll() (0) | 2021.10.31 |
[국비학원 기록/자바] 쓰레드01. 프로세스, 스레드(Thread)장점, 단점,우선순위 (0) | 2021.10.31 |