Java/컬렉션

[Java]ArrayList 정렬

DevStory 2022. 6. 23.

이번 포스팅은 ArrayList를 정렬하는 방법을 소개합니다.


오름차순 - Collections.sort() 메서드

Java에서 ArrayList는 Collections 클래스의 sort() 메서드를 사용하여 정렬할 수 있습니다. 정렬하고자 하는 ArrayList 객체를 sort() 메서드에 매개변수로 전달하면 ArrayList 객체가 오름차순으로 정렬됩니다.

public static <T extends Comparable<? super T>> void

정렬하고자 하는 ArrayList의 모든 요소는 상호 비교 가능해야 합니다. 상호 비교되지 않으면 sort() 메서드에서 ClassCastException 예외가 발생합니다.

 

다음 예제는 ArrayList 요소의 값이 타입과 호환되지 않아 sort() 메서드에서 ClassCastException 예외가 발생합니다.

public class Main {
  public static void main(String args[]) {
    ArrayList li = new ArrayList();
    li.add("One");
    li.add("Two");
    li.add(3);
    li.add(4);
    li.add("Five");
  }
}

에러 내용

위의 예제에서 ArrayList의 객체에 5개의 요소가 존재합니다. 이 중 3개의 요소는 String 타입이고 2개는 Integer 타입입니다. String 타입의 값과 Integer 타입의 값은 비교할 수 없으므로 ClassCastException 예외가 발생하였습니다.

 

다음 예제는 동일한 타입으로 선언된 ArrayList의 객체를 오름차순으로 정렬합니다.

public class Main {
  public static void main(String args[]) {
    ArrayList<Integer> numLi = new ArrayList<Integer>(
            Arrays.asList(1, 5, 3, 2, 4)
    );

    System.out.println("Integer 타입의 ArrayList 정렬");
    System.out.println("sort() 메서드 호출 전: " + numLi);
    Collections.sort(numLi);
    System.out.println("sort() 메서드 호출 후: " + numLi);

    ArrayList<String> strLi = new ArrayList<String>(
            Arrays.asList("B", "D", "A", "AB", "AC", "C")
    );

    System.out.println("\nString 타입의 ArrayList 정렬");
    System.out.println("sort() 메서드 호출 전: " + strLi);
    Collections.sort(strLi);
    System.out.println("sort() 메서드 호출 후: " + strLi);
  }
}

실행 결과

Integer 타입의 ArrayList 정렬
sort() 메서드 호출 전: [1, 5, 3, 2, 4]
sort() 메서드 호출 후: [1, 2, 3, 4, 5]

String 타입의 ArrayList 정렬
sort() 메서드 호출 전: [B, D, A, AB, AC, C]
sort() 메서드 호출 후: [A, AB, AC, B, C, D]

내림차순 - Collections.reverseOrder() 메서드

Collections.sort() 메서드는 컬렉션을 오름차순으로 정렬합니다. ArrayList를 내림차순으로 정렬하려면 ArrayList를 sort() 메서드로 오름차순으로 정렬 후 Collections 클래스의 reverseOrder() 메서드를 사용합니다.

public static <T> Comparator<T> reverseOrder()

내림차순으로 정렬하기 위해 ArrayList의 객체가 reverseOrder() 메서드를 직접 호출하지 않습니다.

 

Collections.reverseOrder() 메서드는 Collections.sort() 메서드와 함께 사용됩니다.

 

다음 예제는 동일한 타입으로 선언된 ArrayList의 객체를 내림차순으로 정렬합니다.

public class Main {
  public static void main(String args[]) {
    ArrayList<Integer> numLi = new ArrayList<Integer>(
            Arrays.asList(1, 5, 3, 2, 4)
    );

    System.out.println("Integer 타입의 ArrayList 정렬");
    System.out.println("sort() 메서드 호출 전: " + numLi);
    Collections.sort(numLi, Collections.reverseOrder());
    System.out.println("sort() 메서드 호출 후: " + numLi);

    ArrayList<String> strLi = new ArrayList<String>(
            Arrays.asList("B", "D", "A", "AB", "AC", "C")
    );

    System.out.println("\nString 타입의 ArrayList 정렬");
    System.out.println("sort() 메서드 호출 전: " + strLi);
    Collections.sort(strLi, Collections.reverseOrder());
    System.out.println("sort() 메서드 호출 후: " + strLi);
  }
}

실행 결과

Integer 타입의 ArrayList 정렬
sort() 메서드 호출 전: [1, 5, 3, 2, 4]
sort() 메서드 호출 후: [5, 4, 3, 2, 1]

String 타입의 ArrayList 정렬
sort() 메서드 호출 전: [B, D, A, AB, AC, C]
sort() 메서드 호출 후: [D, C, B, AC, AB, A]
반응형

댓글