1차원 배열 정렬
java.util 안에 있는 Arrays 클래스를 가져온다
1차원 배열 오름차순 | 1차원 배열 내림차순 |
import java.util.Arrays; | import java.util.Arrays; import java.util.Collections; |
Arrays.sort( 배열 ); | Arrays.sort( 배열 , Collections.reverseOrder() ); |
int 배열 사용 가능 | Wrapper Class 사용(Integer 등) |
*내림차순에서는 int가 아닌 Integer을 사용함에 유의한다
import java.util.Arrays;
public class Main {
public static void main(String[] args){
Integer[] arr = {3,5,2,1,4,6,9,8,7};
Arrays.sort(arr);
for(int i=0; i<9;i++) {
System.out.print(arr[i]+" ");
} //오름차순으로 정렬: 1 2 3 4 5 6 7 8 9
}}
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args){
Integer[] arr = {3,5,2,1,4,6,9,8,7};
Arrays.sort(arr, Collections.reverseOrder());
for(int i=0; i<9;i++) {
System.out.print(arr[i]+" ");
} //내림차순으로 정렬: 9 8 7 6 5 4 3 2 1
}}
2차원 배열 정렬
Comparator 클래스를 사용해 compare 함수를 재정의한다
2차원 배열 오름차순 | 2차원 배열 내림차순 |
import java.util.Arrays; import java.util.Comparator; |
import java.util.Arrays; import java.util.Comparator; |
Arrays.sort( 배열, new Comparator<int[]>() {내부구문} ); | Arrays.sort( 배열, new Comparator<int[]>() {내부구문}); |
if(o1[0]==o2[0]) return o1[1]-o2[1]; else return o1[0]-o2[0]; |
if(o1[0]==o2[0]) return o1[1]-o2[1]; else return o2[0]-o1[0]; |
이해를 위해 Arrays.sort를 먼저 작성해본다
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args){
int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
Arrays.sort(arr, new Comparator<int[]>() {
} );
//이렇게 작성하면 Comparator가 빨간줄이 뜨는데 마우스를 올려놓으면
//자동완성해준다(Override를 생성)
}}
Arrays.sort(arr, new Comparator<int[]>() { } );
위처럼 중괄호를 넣는 순간 빨간줄이 뜨고 클릭하면 자동완성해준다
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args){
int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
// TODO Auto-generated method stub
return 0;
}
} );
}}
이중배열에 대한 정렬기준을 정해주어야 한다(compare 함수 수정).
이 배열 안에서는 정수형과 정수형이 아닌 배열과 배열의 비교, 즉 객체와 객체를 비교한다
정렬은 1 대 1 비교를 통해 이루어지므로 어떤 객체 o1과 o2로 표현할 수 있다
1) 둘의 값을 무엇으로 비교할 것인지 표기한다. ex) o1[0], o2[0]
2) 둘이 비교하는 값이 같을 경우 어떻게 배열할 것인지 표기한다
ex) if(o1[0]==o2[0]) return o1[1]-o2[1] //[0]항이 같으면 [1]항을 기준
3) 오름차순, 내림차순 중 방법을 정해준다
ex) if(o1[0]==o2[0]) return o1[1]-o2[1]; //o2[1]-o1[1]은 내림차순
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args){
int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
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<5;i++) {
System.out.print("["+arr[i][0]+","+arr[i][1]+"]"+" ");
}
}}
'Study > Java' 카테고리의 다른 글
Java: String 문자열 비교에서 ==, != 아닌 equals() 메소드사용, Wrapper 클래스 값 비교(리터럴, new 연산자 생성) (0) | 2021.11.08 |
---|---|
Java: System.in.read(); 이해하기, 입력값을 알뜰하게 받기 (0) | 2021.11.05 |
Java: 배열의 초기값 ( String 배열의 초기값만 왜 null? ) (0) | 2021.10.25 |
Java: if문을 더 짧게, 삼항 연산자 (0) | 2021.10.20 |
Java: 소수 표현, 소수 반올림 표기 - format, DecimalFormat (0) | 2021.10.14 |