Java array sort 하는 방법

Tech Note 정보 카테고리: [ Development ] 게시됨: 15 June 2021 작성됨: 15 June 2021 최종 변경: 15 June 2021 조회수: 1979

1. 개요

자바 언어에서 배열(Array)을 정렬하는 방법이다. Arrays.sort 를 사용한다.


2. 숫자 정렬

import java.util.Arrays;

public class ArraySort {
    public static void main(String[] args) {
        int nums[] = { 13, 47, 55, 61, 99, 45 };

        for ( int n : nums ) {
            System.out.println(n);
        }

        Arrays.sort(nums);

        System.out.println("After sort ->");

        for ( int n : nums ) {
            System.out.println(n);
        }
    }
}

결과는 다음과 같다.

13
47
55
61
99
45
After sort ->
13
45
47
55
61
99

3. 숫자 역정렬 (Reverse)

  • int 배열을 Integer[] 배열로 변환
  • Reverse 처리
import java.util.Arrays;
import java.util.Collections;

public class ArraySort {
    public static void main(String[] args) {
        int nums[] = { 13, 47, 55, 61, 99, 45 };

        for ( int n : nums ) {
            System.out.println(n);
        }

        Arrays.sort(nums);

        System.out.println("After sort ->");

        for ( int n : nums ) {
            System.out.println(n);
        }

        Integer[] numInt = Arrays.stream(nums).boxed().toArray(Integer[]::new);
        Arrays.sort(numInt, Collections.reverseOrder());

        System.out.println("After reverse sort ->");

        for ( Integer n : numInt ) {
            System.out.println(n);
        }
    }
}

결과는 다음과 같다.

13
47
55
61
99
45
After sort ->
13
45
47
55
61
99
After reverse sort ->
99
61
55
47
45
13

4. 문자 정렬

import java.util.Arrays;

public class ArraySort {
    public static void main(String[] args) {
        String strs[] = { "Apple", "Dell", "Gateway", "Sambo", "Daewoo" };

        for ( String s : strs ) {
            System.out.println(s);
        }

        Arrays.sort(strs);

        System.out.println("After sort ->");

        for ( String s : strs ) {
            System.out.println(s);
        }
    }
}

결과는 다음과 같다.

Apple
Dell
Gateway
Sambo
Daewoo
After sort ->
Apple
Daewoo
Dell
Gateway
Sambo

5. 문자 역정렬 (Reverse)

  • ArrayList로 변환
  • 정렬 후 다시 배열로 변환
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ArraySort {
    public static void main(String[] args) {        
        String strs[] = { "Apple", "Dell", "Gateway", "Sambo", "Daewoo" };

        for ( String s : strs ) {
            System.out.println(s);
        }

        Arrays.sort(strs);

        System.out.println("After sort ->");

        for ( String s : strs ) {
            System.out.println(s);
        }

        List strList = new ArrayList(Arrays.asList(strs));
        Collections.reverse(strList);

        System.out.println("After reverse sort ->");

        String[] sortedStrs = strList.toArray(new String[strList.size()]);

        for ( String s : sortedStrs ) {
            System.out.println(s);
        }
    }
}

결과는 다음과 같다.

Apple
Dell
Gateway
Sambo
Daewoo
After sort ->
Apple
Daewoo
Dell
Gateway
Sambo
After reverse sort ->
Sambo
Gateway
Dell
Daewoo
Apple

2020-11-13


Java array sort 하는 방법
Java array sort 하는 방법

알고리즘 및 배열에 관련된 문제를 처리하다 보면, 각 배열을 정렬을 해야 하는 경우가 생기게 된다. 때문에 오늘은 이 정렬 중 2차원 배열을 정렬하는 방법을 알아보도록 하자.

흔히들 1차원 배열은 Array.sort(배열 이름)라는 메서드를 이용해서 손쉽게 정렬을 할 수 있다. 다만 2차원 배열의 경우에는 여기에 추가적인 조건을 제시하여야 한다. 우선 예제는 아래와 같다. (3행 2열의 배열을 우선적으로 만들어 주었다.)


ex)배열: arr

(3, 5)

(4, 2)

(3, 4)


그러면 바로 코드를 살펴보도록 하자

import java.util.Arrays;
import java.util.Comparator;

우선 2종류의 import를 실행해야 한다. 정렬을 위한 Arrays와 비교를 위한 Comparartor를 import 해주면 된다.

import java.util.Arrays;
import java.util.Comparator;

public class TemplateA {
		public static void main(String[] args)  {
			int [][] arr = {{3,5}, {4,2}, {3,4}};

			//2차월 배열 정렬 0번쨰 열 다음 1번째 열 기준(다중 배열 정렬)
			Arrays.sort(arr, 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]; 
			    	 }
		           }
		        });

다음은 구체적인 정렬 문이다. ' Arrays.sort(arr '까지는 동일하나 괄호를 닫기 전에 Comparator라는 클래스가 사용된다. 이는 정렬을 할 때, 자신이 원하는 조건으로 배열을 정렬할 수 있도록 해준다. (우리는 Comparator를 설명하는 것이 아니기 때문에 여기까지만 이야기하겠다.) 현재 정수를 정렬하는 것이기 때문에, 속성은 int를 선언해주고 자신이 원하는 조건을 compare안에 작성해준다. 

if(o1 [0] == o2[0]) 의 부분은 배열의 0번째 위치를 비교해 주고 해당 배열의 위치가 같으면,  return o1[1] - o2[1]; 를통해 오름차순 정렬을 해준다. (내림차순으로 바꾸고 싶으면  return o2[1] - o1[1]; 로 좌우만 바꾸어 주면된다.)

else { return o1[0] - o2 [0]; }는 0번째 열부터 다르기 때문에 0번째 열 기준으로 오름차순으로 정렬해준다.

(마찬가지로 내림차순으로 바꾸고 싶으면  return o2[0] - o1 [0]; 로 좌우만 바꾸어 주면 된다.)


Java array sort 하는 방법

아래의 코드로 이제 최종적으로 코드를 출력해보도록 하자

import java.util.Arrays;
import java.util.Comparator;

public class TemplateA {
		public static void main(String[] args)  {
			int [][] arr = {{3,5}, {4,2}, {3,4}};

			//2차월 배열 정렬 0번쨰 열 다음 1번째 열 기준(다중 배열 정렬)
			Arrays.sort(arr, 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]; 
			    	 }
		           }
		        });
			
			for(int i = 0; i < 3; i++) {
				for(int j = 0; j < 2; j++) {
					System.out.print(arr[i][j] + " ");
				}
				System.out.println();
			}
		
		
		}
	}



Java array sort 하는 방법

콘솔 값에 정확히 0번 열 기준 오름차순 후 1번 열 기준 오름차순으로 정렬되어 출력된 것을 알 수 있다.

Java array sort 하는 방법