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

2021. 5. 4. 11:39JAVA

 

 

Comparator <int[]> 

  • 2차원 배열같은 경우 일반적인 배열 정렬 방법인 Array.sort가 먹히지 않는다. (사용 시 exception 발생)
  • 그러므로 Comparator를 이용하여 정렬을 해줘야 한다.
  • 아래 소개될 코드는 배열의 첫번째 원소를 기준으로 정렬하는 방법이다.

 


 

오름 차순 코드

int [][] number={{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};

Arrays.sort(number, new Comparator<int[]>() {
    @Override
       public int compare(int[] o1, int[] o2) {
           return o1[0]-o2[0];
       }
 });

해당 코드를 이용해 정렬을 한 결과는 다음과 같다.

배열의 첫번째첫 번째 원소를 기준으로 정렬은 잘 되었지만, 첫 번째 원소가 같은 경우 두 번째 원소의 순서가 맞지 않는다. 

첫 번째 원소가 같을 때 두 번째 원소도 순서대로 정렬되길 원하면 if 조건문을 추가해주면 된다.

int [][] number={{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};

Arrays.sort(number, new Comparator<int[]>() {
     @Override
     public int compare(int[] o1, int[] o2) {
         if (o1[0]==o2[0]){
            return o1[1]-o2[1];
         }
         else{
            return o1[0]-o2[0];
         }
     }
});

출력결과

 

 


 

내림차순 정렬 코드

int [][] number={{4,2},{4,3},{8,6},{10,7},{1,4},{1,5}};

Arrays.sort(number, new Comparator<int[]>() {
     @Override
     public int compare(int[] o1, int[] o2) {
         if (o1[0]==o2[0]){
             return o2[1]-o1[1];
         
         }
         else{
             return o2[0]-o1[0];
         }
     }
 });

오름 차순 정렬 코드에서 o1 과 o2의 자리를 바꿔주면 된다.