공부 기록

[Java] Arrays.sort 통한 배열 정렬

양바른 2023. 8. 6. 13:27

1차원 배열의 오름차순

import java.util.Arrays;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};

		Arrays.sort(arr,(o1,o2)->Integer.compare(o1[0], o2[0])); // ◀◀◀
		
		for(int i=0 ; i<arr.length ; i++)
			System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

또는

import java.util.Arrays;

public class array_sort {

	public static void main(String[] args) {
		int arr[] = {3,75,98,2,21,11,94};
		Arrays.sort(arr);

		for (int i : arr)
			System.out.print(i + " ");
	}

}

출력 결과는 다음과 같다.

2 3 11 21 75 94 98

1차원 배열의 내림차순

import java.util.Arrays;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};

		Arrays.sort(arr,(o1,o2)->Integer.compare(o2[0], o1[0])); // ◀◀◀
		
		for(int i=0 ; i<arr.length ; i++)
			System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

또는

import java.util.Arrays;
import java.util.Collections;

public class array_sort {

	public static void main(String[] args) {
		Integer arr[] = {3,75,98,2,21,11,94};
		Arrays.sort(arr, Collections.reverseOrder());

		for (int i : arr)
			System.out.print(i + " ");
	}
}

출력 결과는 다음과 같다.

98 94 75 21 11 3 2

2차원 배열의 오름차순

  • 1열 기준으로 오름차순 정렬
import java.util.Arrays;
import java.util.Comparator;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};
		
		Arrays.sort(arr, new Comparator<int[]>(){
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[0]-o2[0];
			}
				
		})	;
		
		for (int i=0; i < arr.length ; i++)
			System.out.println(arr[i][0]+" "+arr[i][1]);
	}
	

}

출력 결과는 다음과 같다.

1 5
1 4
4 3
4 2
8 6
10 7

 

  • 2열 기준으로 오름차순 정렬

Comparator 함수 부분의 return 만 아래 부분으로 변경하면 된다.

return o1[1]-o2[1];

 

  •  1열과 2열 모두 오름 차순 정렬
import java.util.Arrays;
import java.util.Comparator;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};
		
		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<arr.length ; i++)
			System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

출력결과는 다음과 같다.

1 4
1 5
4 2
4 3
8 6
10 7

2차원 배열의 내림차순

  • 1열 기준으로 내림차순 렬
import java.util.Arrays;
import java.util.Comparator;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};
		
		Arrays.sort(arr, new Comparator<int[]>(){

			@Override
			public int compare(int[] o1, int[] o2) {
				return o2[0]-o1[0];
			}
			
		});		
		for(int i=0 ; i<arr.length ; i++)
			System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

출력 결과는 다음과 같다.

10 7
8 6
4 3
4 2
1 5
1 4
  • 2열 기준으로 내림차순 정렬

Comparator 함수 부분의 return 만 아래 부분으로 변경하면 된다.

return o2[1]-o1[1];
  • 1열과 2열 기준으로 내림차순 정렬
import java.util.Arrays;
import java.util.Comparator;

public class array_sort {

	public static void main(String[] args) {
		int arr[][] = {{4,3},{8,6},{4,2},{10,7},{1,5},{1,4}};
		
		Arrays.sort(arr, new Comparator<int[]>(){

			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[1]==o2[1])
					return o2[1]-o1[1];
				else
					return o2[0]-o1[0];
			}
			
		});		
		for(int i=0 ; i<arr.length ; i++)
			System.out.println(arr[i][0] + " " + arr[i][1]);
	}
}

출력 결과는 다음과 같다.

10 7
8 6
4 3
4 2
1 5
1 4