본문 바로가기
카테고리 없음

[JAVA] 2차원 배열 정렬하기

by hbIncoding 2024. 3. 18.

1. 1차원 배열 단순 정렬 방법

int[] array = {4, 3, 5, 7, 2};
Arrays.sort(array);

>> [2, 3, 4, 5, 7]

역정렬을 할 때는 byte, char, double, short, long, int, float같은  PrimitiveType의 배열에는 적용이 불가능하다.
Integer[] array = {4, 3, 5, 7, 2};
Arrays.sort(array, Comparator.reverseOrder());

>> [7, 5, 4, 3, 2]
  • int를 쓰고 역정렬을 하고 싶다면 for문을 이용해 재정렬하거나 Integer 배열로 바꿔주는게 좋다.

2. 2차원 배열 정렬 방법

  • 2차원 배열의 행 중 n 번째 컬럼 원소들을 기준으로 정렬하는 방법
  • 아래는 1번째 원소를 기준으로 정렬한 예시
int[][] array = {
    {5, 2, 9},
    {1, 5, 10},
    {3, 8, 3},
    {2, 2, 6},
    {3, 2, 8}
};
        
Arrays.sort(array, Comparator.comparingInt((int[] row) -> row[1]));

>>
[5, 2, 9]
[2, 2, 6]
[3, 2, 8]
[1, 5, 10]
[3, 8, 3]


0 번째 원소들의 배열은 고려되지 않았다.
[5, 2, 9]
[2, 2, 6]
[3, 2, 8]
  • 조건 추가하기
    • 제일 우선 기준은 1번째 원소이고, 1번째 원소가 같을 때 0번째 원소기준으로는 내림차순으로 정렬
    • thenComparing과 reversed()를 이용하자.
      • 다차원 배열을 정렬할 때 유용하게 쓰일 수 있다.
int[][] array = {
    {5, 2, 9},
    {1, 5, 10},
    {3, 8, 3},
    {2, 2, 6},
    {3, 2, 8}
};

Arrays.sort(array, Comparator.comparingInt((int[] row) -> row[1])
        .thenComparing(Comparator.comparingInt((int[] row) -> row[0]).reversed()));
        
>>
[5, 2, 9]
[3, 2, 8]
[2, 2, 6]
[1, 5, 10]
[3, 8, 3]