자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 있다. Arrays클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있다.
1. 기본 정렬(오름차순)
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = {4,17,25,31,1};
String[] arr2 = {"apple","orange","banana","pear","peach","melon"};
Arrays.sort(arr);
Arrays.sort(arr2);
for(int i : arr) {
System.out.print(i+" ");
}
System.out.println();
for(String i : arr2) {
System.out.print(i+" ");
}
}
}
2. 내림차순 정렬 - Collections / Comparator
배열을 내림차순으로 정렬할 때는 Collections 클래스의 reverseOrder() 함수를 사용하면 된다. 만약 기본 타입 배열을 내림차순으로 정렬하고 싶다면 기본 타입의 배열을 래퍼클래스로 만들어 Comparator를 두번째 인자에 넣어주어야 역순으로 정렬할 수 있다.
String 자료형은 기본 타입이 아니다.
주의 할 점은, byte, char, double, short, long, int, float 같은 Primitive Type 자료형 배열에는 적용이 불가능하다. 따라서 Integer, String, Double 같은 Wrapper Class를 사용해야 한다!!
import java.util.Arrays;
import java.util.Collections;
public class Test {
public static void main(String[] args) {
Integer[] arr = {4,17,25,31,1};
String[] arr2 = {"apple","orange","banana","pear","peach","melon"};
Arrays.sort(arr, Collections.reverseOrder());
Arrays.sort(arr2, Collections.reverseOrder());
for(int i : arr) {
System.out.print(i+" ");
}
System.out.println();
for(String i : arr2) {
System.out.print(i+" ");
}
}
}
/*
출력
31 25 17 4 1
pear peach orange melon banana apple
*/
3. 2차원 배열 정렬 - Lambda 표현식
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Integer[][] arr = {{2,6}, {1,8},{1,2}};
Arrays.sort(arr, (x1, x2)->{
if(x1[0] == x2[0]) { // 첫 원소가 같다면
return Integer.compare(x1[1], x2[1]); //2번째 원소 비교
}else {
return Integer.compare(x1[0], x2[0]);
}
});
for(int i=0; i < arr.length; i++) {
System.out.println();
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
}
}
}
/*
출력
1 2
1 8
2 6
*/