객체 정렬은 Kruskal로 MST를 구할 때 자주 쓰이는 문법이다. 엣지의 가중치를 오름차순으로 정렬한 후 엣지를 앞에서부터 선택하면 MST를 만들 수 있기 때문이다. 그런데 compareTo의 리턴값을 어떻게 설정해야 객체가 오름차순 또는 내림차순으로 정렬되는지 매번 헷갈려서 간단히 정리하고 넘어가려고 한다.
객체를 정렬하는 방법?
정렬하고자하는 객체들을 리스트에 넣어 Arrays.sort()를 호출하면 된다. Arrays.sort() 호출 시 Comparable 인터페이스의 compareTo() 메서드가 호출된다. compareTo() 메서드는 두 객체를 특정 기준으로 비교하여 int값을 리턴하는 함수인데, compareTo()에 의해 양수가 리턴되면 두 객체의 자리를 바꾸는 식으로 정렬이 이루어진다. 따라서 compareTo() 내에서 정렬 기준을 직접 정해줘야 한다. 객체의 클래스가 Comparable 인터페이스를 상속받도록 만들고 compareTo()를 구현하여 객체 정렬 기준을 설정해주자.
public int compareTo(Edge e) {
return Integer.compare(this.weight, e.weight); //양수가 리턴되면 두 객체의 자리를 바꿈
}
Integer.compare(a,b) 는 현재 객체와 비교 대상 객체를 비교하여 오름차순으로 정렬해주는 함수이다.
내림차순으로 정렬하려면 a, b의 자리를 바꾸면 된다.
Integer.compare(a,b)의 원리 :
a < b //음수 리턴
a == b //0 리턴
a > b //양수 리턴
public int compareTo(Edge e) {
//오름차순: this객체 - 비교대상 객체
//내림차순: 비교대상 객체 - this객체
return this.weight - e.weight;
}
더 간단하게 표현하려면 이와 같이 쓸 수도 있다.
'Java' 카테고리의 다른 글
[JAVA] static 메서드에서 non-static 멤버에 접근 (2) | 2024.04.15 |
---|---|
[JAVA] String Constant Pool (0) | 2024.03.10 |
[JAVA] String과 StringBuffer/StringBuilder (0) | 2024.03.09 |
[JAVA] 다형성이란? 다형성이 필요한 이유 | 오버라이딩, 오버로딩, 타입 변환(업캐스팅) (0) | 2024.03.06 |