[Java] 배열(Array) 정렬하기 (오름차순, 내림차순, 사용자 정의 정렬, 람다)

이준영·2023년 8월 15일
0

🟫 Java

목록 보기
2/21
post-thumbnail

Java 배열 정렬하기

  • 배열 정렬은 간단한 작업이지만 자바에서는 방법이 여러가지라 헷갈릴 때가 있어 한번 정리해보려고 합니다.

Array.sort()

java.util.Arrays 클래스를 활용하면 배열을 간단하게 정렬할 수 있습니다.

int[] intArr = new int[] {1,3,2,5,4};                     
double[] doubletArr = new double[] {3.3, 1.1, 5.5, 2.2, 4.4}; 
String[] stringArr = new String[] {"A","C","B","E","D"};

//정렬
Arrays.sort(intArr);            
Arrays.sort(doubletArr);    
Arrays.sort(stringArr);

출력 결과

intArr = 1 2 3 4 5 
doubleArr = 1.1 2.2 3.3 4.4 5.5 
stringArr = A B C D E 

정렬 범위 지정 - Arrays.sort(arr,fromIndex,toIndex)

인자로 전달한 배열 뒤에 fromIndex(닫힌 구간), toIndex(열린 구간)를 추가하여 정렬할 범위를 지정할 수도 있습니다.

int[] intArr = new int[] {1,3,5,2,4};
Arrays.sort(intArr,2,5); // 2~4번 인덱스 까지만 정렬

출력 결과

intArr = 1 3 2 4 5 

Comparator 사용

primitive 타입이 아닌 Wrapper 클래스 일 경우 arr 뒤에 추가로 Comparator를 인자로 전달하여 정렬 가능합니다.

Integer[] intArr = new Integer[] {1,2,1,1,1};
Arrays.sort(intArr,Comparator.naturalOrder()); // 오름차순
Arrays.sort(intArr,Comparator.reverseOrder()); // 내림차순

Comparator 를 활용한 사용자 정의 정렬

Comparator를 활용하여 사용자가 직접 정렬 기준을 정의할 수도 있습니다.

Integer[] intArr = new Integer[] {1,3,2,5,4};
Arrays.sort(intArr,new Comparator<Integer>() {
	@Override
	public int compare(Integer a, Integer b) { // a는 앞의 수 b는 뒤의 수
		System.out.println(a.compareTo(b));
        return a.compareTo(b); // 오름차순
        //return b.compareTo(a); // 내림차순
    }
});

a.compareTo(b)는 a가 b보다 작다면 양수를 반환하고, a와 b가 같다면 0을 반환, a가 b보다 크다면 음수를 반환합니다.
유사한 방법으로 a.compareTo(b) 대신 a-b를 반환 하여도 동일한 결과를 확인할 수 있습니다.

Integer[] intArr = new Integer[] {1,3,2,5,4};
Arrays.sort(intArr,new Comparator<Integer>() {
	@Override
    public int compare(Integer a, Integer b) { // a는 앞의 수 b는 뒤의 수
    	System.out.println(a.compareTo(b));
    	return a-b; // 오름차순
    	//return b-a; // 내림차순
    }
});

람다식을 사용한 정렬

Integer[] intArr = new Integer[] {1,3,2,5,4};
// 오름차순 정렬
Arrays.sort(intArr, (a, b) ->
	a - b
);
// 내림차순 정렬
Arrays.sort(intArr, (a, b) ->
	b - a
);

Java 8 이상 버전에서는 람다식을 활용하여 간단하게 정렬을 정의할 수 있습니다.

profile
작은 걸음이라도 꾸준히

0개의 댓글