자바기초

Comparable과 Comparator interface

lby132 2022. 8. 31. 00:39

Comparable을 구현하면 compareTo메소드를 재정의 할수있다 

이건 메소드를 호출하는 값과 인자로 넘어온 값을 비교해서 인자로 넘어온 값이 메소드를 호출한 값보다 크면 음수 같으면 0

작으면 음수를 반환한다. 만약 점수를 내림 차순으로 정렬한다면 인자로 넘어온 점수에서 메서드를 호출하는 점수를 빼면 된다.

인자로 넘어온 값이 900이고 메서드를 호출한 객체의 값이 1000이라면 (900 - 1000)이니까 음수를 리턴하게 된다.

 

Comparator을 구현하면 compare메소드를 재정의 할 수 있는데

이건 정렬 대상 클래스의 코드를 직접 수정할 수 없는 경우 정렬하고자 하는 객채가 이미 존재하고 있는 정렬 기준과 다른 정렬 기준으로 바꾸고 싶을때 사용한다. Comparator 인터페이스의 구현체를 Arrays.sort()나 Collections.sort()와 같은 정렬 메서드의 추가 인자로 넘기면 정렬 기준을 누락된 클래스의 객체나 기존 정렬 기준을 무시하고 새로운 정렬 기준으로 객체를 정렬할 수 있다.

compare()는 비교 대상이 2개의 인자를 차례대로 받는다.

첫번째 인자가 두번째 인자보다 작다면 음수 같으면 0 크면 양수를 반환 한다.

sort()는 두번째 인자로 Comparator를 받기 때문에

Collections.sort(subject, (a, b) -> b.getScore() - a.getScore());

이런식으로 람다로 간단하게 작성할수도 있다.

'자바기초' 카테고리의 다른 글

중첩 클래스  (0) 2025.06.15
체크예외와 언체크예외  (0) 2025.06.15
static class용도  (0) 2022.08.23
synchronized 블럭 lock  (0) 2022.08.17
스레드 동기화  (0) 2022.08.16