더북(TheBook)

이번에는 커스텀 비교자custom comparator를 이용해 정렬을 수행한다고 하자. 문자열을 기본 사전 순서 대신에 길이로 정렬하려고 한다면, sort 메서드에 Comparator 객체를 전달할 수 있다.


class LengthComparator implements Comparator<String> {

public int compare(String first, String second) {

return Integer.compare(first.length(), second.length());

}

}

 

Arrays.sort(strings, new LengthComparator());


 

sort 메서드는 배열이 모두 정렬될 때까지 compare 메서드를 계속해서 호출하며 요소들의 순서가 어긋나 있으면 재배치한다. sort 메서드에 (대개는 재구현하지 않을) 요소들을 비교하는 데 필요한 코드 조각을 전달하면, 해당 코드는 정렬 로직의 일부로 통합된다.

<Note>

Integer.compare(x, y)xy가 같으면 0을, x < y면 음수를, x > y면 양수를 리턴한다. 이 정적 메서드는 자바 7(9장 참고)에 추가되었다. xy를 비교하기 위해 x - y를 계산하면 안 된다는 점을 주의하기 바란다(이렇게 계산하면 부호가 반대인 큰 피연산자의 경우 오버플로우를 일으킬 수 있다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.