Comparable 인터페이스 (java.lang)
객체 간의 일반적인 정렬이 필요할 때, Comparable 인터페이스를 확장한다.
정렬할 객체에 Comparable 인터페이스를 implements 한 후, CompareTo() 메서드를 오버라이드 하여 정렬
CompareTo()
- 현재 객체 < 파라미터로 넘어온 객체 : 음수 리턴
- 현재 객체 = 파라미터로 넘어온 객체 : 0 리턴
- 현재 객체 > 파라미터로 넘어온 객체 : 양수 리턴
Comparator 인터페이스 (java.util)
객체 간의 특정한 정렬이 필요할 때, Comparator 인터페이스를 확장해서 특정 기준을 정의하는 compare() 메서드를 구현한다.
기본적인 정렬 기준과 다르게 정렬하고 싶을 때 사용
Comparator 인터페이스를 implements 한 후, compare() 메서드를 오버라이드한 클래스를 작성한다.
compare()
- 첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체 : 음수 리턴 (유지)
- 첫 번째 파라미터로 넘어온 객체 = 두 번째 파라미터로 넘어온 객체 : 0 리턴 (유지)
- 첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체 : 양수 리턴 (두 객체 자리 변경)
역으로 정렬하기 예제(내림차순)
Arrays.sort(time, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
// 0: 시작 시간, 1: 종료 시간
// 끝시간이 같을 경우 시작 시간 정렬
if(o1[1] == o2[1]) {
return Integer.compare(o1[0], o2[0]);
}
// 종료 시간 정렬
return Integer.compare(o1[1], o2[1]);
}
});
객체 정렬 예제 (나이를 기준으로 객체 정렬)
public static void main(String[] args) {
Student s1 = new Student("name1", 27);
Student s2 = new Student("name2", 31);
Student s3 = new Student("name3", 30);
Student[] arr = new Student[]{s1, s2, s3};
Arrays.sort(arr, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
for(Student s : arr) {
System.out.println(s.getName() + " " + s.getAge());
}
}
'CS > Algorithm' 카테고리의 다른 글
[Algorithm] 그래프(Graph) (0) | 2020.11.15 |
---|---|
[Algorithm/Java] Iterator, ListIterator (0) | 2020.11.14 |
[Algorithm/Java] LinkedList 자료구조 (0) | 2020.11.14 |
[Algorithm] BFS, 너비 우선 탐색 (0) | 2020.11.14 |
[Algorithm] DFS, 깊이 우선 탐색 (0) | 2020.11.02 |