[Java] Comparator를 이용한 배열 정렬

minji·2021년 9월 8일
0

Java에서 배열을 간단히 정렬할때에는 Arrays.sort() 를 이용한다.

이외에, 조건이 붙은 정렬에 Comparator를 이용할 수 있다.

정수배열의 정렬

1차원 배열 intArray와 2차원 배열 intArray2를 무작위의 정수 순서로 정의한 후,
1차원 배열은 오름차순으로, 2차원 배열은 2번째 원소 기준 오름차순으로 정렬해보자.


  • 1차원 배열
    1차원 배열의 오름차순 정렬은 간단하게 Arrays.sort()를 사용할 수 있다.

  • 2차원 배열
    2차원 배열의 경우, 2번째 원소 기준 오름차순 정렬을 하고자 한다.
    이때는 sort 함수의 두번째 인자로 Comparator.comparingInt() 를 넣어주면 된다.
    그리고 그 내부에, 람다식을 이용해 i->i[1] 를 인자로 넣어주면 2번째 원소 기준 오름차순 정렬이 가능하다.


문자열 배열의 정렬

문자열배열 : ["blue","apple","cat"]

  • 오름차순 정렬
    오름차순 정렬의 경우, 역시 간단히 Arrays.sort() 를 사용한다.

이외에 조건을 넣어 정렬하고 싶은 경우에는 Comparator.comparing()을 사용할 수 있다.

  • 길이순 정렬
    문자열의 길이순으로 정렬하고자 하는 경우, String::length 를 인자로 넣어주면 된다.
    참고로 ::은 클래스의 메서드를 참조하는 것으로, String 클래스의 length() 메서드 반환값을 이용하겠다는 의미이며,
    Comparator.comparing(s->s.length()) 로 대체해도 같은 결과를 갖는다.

  • 길이 역순 정렬
    반대로 문자열 길이의 역순으로 정렬하고 싶다면 위의 결과를 뒤집어주면 된다.
    즉, Comparator.comparing(String::length).reversed()와 같이 사용할 수 있다.


사용자 정의 정렬

마지막으로, 보다 복잡한 조건의 정렬일 경우 Comparator 클래스를 이용해 사용자 정의 정렬을 할 수 있다.

예시의 경우, 첫글자가 같은 문자열일 경우에 한해서는 마지막 글자 순으로 정렬하고자 한다.

우선, comparator라는 이름의 Comparator를 정의하고 그 내부에 정렬 조건을 기술해주어야 한다.
이후, 이 comparator를 sort함수의 2번째 인자로 넣어주면 된다.

이는 우리가 주로 사용하는 객체의 정렬에서 compareTo함수를 오버라이딩하는 것과 거의 같다.

두번째 화면의 결과를 통해 볼 수 있듯, aa로 시작하는 문자열들에 대해 마지막글자인 a,c,w,z 순으로 오름차순 정렬되었음을 확인할 수 있다.

profile
SW Engineer

0개의 댓글