Java

[JAVA] Comparable로 객체 정렬하기

syj0522 2024. 4. 14. 18:27

객체 정렬은 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;
	}

더 간단하게 표현하려면 이와 같이 쓸 수도 있다.