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