[JAVA] compareTo 정렬 기준 오버라이딩

dev_shim·2022년 10월 3일
0

JAVA

목록 보기
2/4
post-thumbnail

CompareTo

CompareTo (Object o) 메서드는 입력 매개변수로 받는 o의 비교값과 compareTo 메서드를 실행할 객체의 비교값을 비교하여 음수를 리턴하는 경우는 this가 먼저, 양수를 리턴하는 경우는 o 가 먼저인 순서로 sort 된다

이 메서드의 핵심은 객체의 값을 비교하는 것.

활용

  • 비교할 객체 타입의 클래스에 Comparable<해당타입>을 상속한다.
  • @Override compareTo 메서드를 구현한다.
public class Car implements Comparable<Car> {
    private static final int MOVE_LIMIT =4;
    private static final int STARTING_POSITION = 0;

    private final String carName;
    private int position;


    @Override
    public int compareTo(Car otherCar) {
        return otherCar.position - this.position;
    }
}

PriorityQueue

우선순위 큐에서 지정한 타입이 만약 사용자가 선언한 클래스 타입이라면 해당 클래스에서 우선순위 큐에 넣을 정렬 기준을 미리 지정해줄 수 있다.

Collections.sort(배열)

기본타입은 내부적으로 compareTo가 구현되어 있어서 Arrays.sort(배열)로 정렬이 가능하지만
사용자가 직접 선언한 타입의 객체는 그렇게 정렬이 불가능하다.
하지만 위의 활용처럼 Comparable을 상속받아 compareTo 메서드를 오버라이드해서 정렬 기준을 미리 알려주면
단순이 Collections.sort(해당타입의 객체들이 들어간 배열)만 해주면 알아서 그 기준에 따라 정렬이 된다.

  private Car findFastestCar(List<Car> cars) {
        Collections.sort(cars);
        return cars.get(0);
    }      

피드백 환영

참고블로그 https://velog.io/@eeheaven/JAVA-compareTo-%EC%A0%95%EB%A0%AC-%EA%B8%B0%EC%A4%80-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9

profile
개발 연습장

0개의 댓글