자기 자신과 매개변수 객체를 비교하는 것
두 매개변수 객체를 비교하는 것
public class ClassName implements Comparable<T>
//코드
public int compareTo(T object) {
//비교 코드 구현
}
Comparable 인터페이스를 상속받는 클래스를 구현하고
그 클래스의 메서드로 compareTo()
를 필수로 구현해야 한다.
compareTo()
가 객체를 비교할 기준을 정의해주는 부분이다.
class Student implements Comparable<Student> {
int age;
int classNumber;
Student(int age, int classNumber) {
this.age = age;
this.classNumber = classNumber;
}
@Override
public int compareTo(Student son) {
// 자기 자신의 나이가 son의 나이보다 큰 경우 양수
if(this.age > son.age) {
return 1;
}
// 자기 자신의 나이가 son의 나이와 같다면 0
else if(this.age == son.age) {
return 0;
}
// 자기 자신의 나이가 son의 나이보다 작으면 음수
else {
return -1;
}
}
꼭 반환값이 1,0,-1이 아니여도 상관없음.
반환값이 양수,음수,0이면 비교가 가능하다.
@Override
public int compareTo(Student son) {
return this.age - son.age;
}
자기 자신을 비교하는 것이 아닌 파라미터로 들어온 두 객체를 비교한다.
import java.util.Comparator;
public class ClassName implements Comparator<T> {
// 코드
public int compare(T object1, T object2) {
// 비교 연산
}
}
객체 비교 연산 부분인 compare()
메서드를 필수 구현해야 한다.
import java.util.Comparator;
public class Student implements Comparator<Student> {
int age;
int classNumber;
Student(int age, int classNumber) {
this.age = age;
this.classNumber = classNumber;
}
@Override
public int compare(Student son, Student kang) {
if(son.classNumber > kang.classNumber) {
return 1;
}
else if(son.classNumber == kang.classNumber {
return 0;
else {
return -1
}
}
}
Comparable
과 마찬가지로 compare 메서드를 간략하게 가능하다.
@Override
public int compare(Student o1, Student o2) {
return o1.classNumber - o2.classNumber;
}
실제로 알고리즘 문제를 풀때는 Comparator<>의 기능만 사용하고 싶은 경우가 많기 때문에 익명 객체를 만들어 기능을 구현한다.
익명객체를 가리키는 변수명만 바꾸면 몇개든 자유롭게 생성할 수 있고
다양한 비교 기준을 만들 수 있다.
Comparator<Student> test = new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.classNumber - o2.classNumber;
}
};
만약, 다양한 문자열이 담긴 배열이 존재하는데 이 배열을 문자열의 길이 순으로 정렬하고 싶다면??
String [] str = {abcd, ab, a, abcdef};
Arrays.sort(str, new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
//결과값 : str = {a,ab,abcd,abcdef}
compare
메서드의 두 원소 간의 길이 차를 반환값으로 한다.