더북(TheBook)

015 문자열 배열을 길이 순으로 정렬

 

정렬하면 가장 먼저 떠오르는 방법은 비교자(comparator)를 사용하는 것이다.

여기서는 문자열의 길이를 비교해야 하므로 주어진 배열의 각 문자열마다 String.length()를 호출해 정숫값을 받겠다. 정수들을 (오름차순이나 내림차순으로) 정렬하면 문자열이 정렬된다.

자바 Arrays 클래스에 이미 배열을 받아 정렬하는 sort() 메서드와 비교자가 있다. 이 문제에는 Comparator<String>을 써야 한다.

Info ≣ 자바 7 이전에는 비교자 구현 코드에 compareTo() 메서드가 쓰였다. 이 메서드는 일반적으로 x1 - x2의 차이를 계산할 때 쓰이는데, 이때 오버플로가 발생할 수 있다. 결국 compareTo() 메서드가 상당히 장황해진다. 자바 7 이후부터는 (오버플로 위험이 없는) Integer.compare()를 쓰는 것이 바람직하다.

아래 메서드는 Arrays.sort() 메서드로 주어진 배열을 정렬한다.

public static void sortArrayByLength(String[] strs, Sort direction) {
  if (direction.equals(Sort.ASC)) {
    Arrays.sort(strs, (String s1, String s2)
      -> Integer.compare(s1.length(), s2.length()));
  } else {
    Arrays.sort(strs, (String s1, String s2)
      -> (-1) * Integer.compare(s1.length(), s2.length()));
  }
}

Info ≣ 원시 수 타입에는 래퍼마다 compare() 메서드가 존재한다.

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