Array.sort()을 이용하면 쉽게 배열을 정렬할 수 있다. 배열에 든 내용이 Integer인지 String인지 중요하지 않다.
기본적으로 객체는 Comparable이 구현되어 있다. sort()는 Comparable에 의해 리턴되는 값을 비교하여 오름차순 또는 내림차순으로 배열을 정렬한다.
1. 배열 오름차순 정렬
사용법은 매우 간단하다. Arrays.sort(정렬시킬 배열)로 사용한다. sort()함수 내부에서 변수 arr의 순서를 변경해주기 때문에 다시 arr에 할당해줄 필요가 없다.
2. 배열 내림차순 정렬
내림차순으로 정렬하고싶다면 Arrays.sort(정렬시킬 배열, Collections.reverseOrder())로 사용한다. Collections.reverseOrder()은 Comparato 객체이며 Comparato는 직접 구현해하지만 내림차순은 자주 사용되기 때문에 Collections에서 기본으로 제공해주고 있다.
하지만 기존의 선언했던 정수배열로 사용하려하면 에러가 발생한다. Collections.reverseOrder()은 사실 Comparator 객체로 sort(T[] a, Comparator<?super T>c)로 되어있고 여기서 T는 Generic Class로 어떠한 객체도 허용하게 해주지만 선언했던 arr은 int 즉 primitive type(기본타입)으로 해당되지 않았던 것이다. 그래서 해당 코드를 Integer[]로 변경해주면 에 없이 내림차순이 정상적으로 출력되는 것을 확인할 수 있다.
내림차순 Comparator를 직접 구현를 하면 다음과 같다.
Integer[] arr = {26,38,92,10,13,16,49,87};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
System.out.println("Sorted arr[] : " + Arrays.toString(arr));
위 코드가 조금 길어보인다면 Lambda를 사용하여 더 짧게 구현할 수 있다.
Integer[] arr = {26,38,92,10,13,16,49,87};
Arrays.sort(arr,(i1,i2)->i2-i1);
System.out.println("Sorted arr[]: "+Arrays.toString(arr));
3. 배열 부분 정렬
배열을 원하는 부분만 정렬하는 것도 가능하다. 사용법은 Arrays.sort(정렬시킬 배열,시작인덱스,끝인덱스)로 기존 Arrays.sort()를 사용하면서 추가로 정렬하고싶은 시작인덱스와 정렬을 마칠 끝인덱스를 넣어주면 된다.
다음과 같이 Arrays.sort()의 인자로 처음 인덱스와 마지막 인덱스를 전달했다. 이는 정렬할 범위를 지정하는 것이고 코드를 해석하면 arr배열을 정렬하지만 index 0에서 index 4를 포함하는 배열만 정렬해줘 라는 의미다.
하지만 결과를 보면 생각했던 것과 조금 다를 수 있다. index 0은 26이고 index 4는 13이니 13까지 정렬이 되었을꺼야 생각하지만 index 4의 13은 exclude 즉 4를 포함하지않는다. 그래서 위의 말을 조금 더 다듬는다면 index 0에서 index 4 사이의 배열만 정리해줘가 된다.
4. String 배열 정렬
문자열 배열을 정렬 방법은 Integer 정렬 방법과 동일하다.
다음과 같이 구현을 하면 알파벳의 아스키 값으로 비교를 하여 정렬을 한다.
내림차순으로 정렬하는 것도 역시 동일하다.
5. String 배열 문자열 길이 순서로 정렬하기
만약 문자열 길이 순서로 정렬하고 싶다면 직접 Comparator를 구현해 정렬할 수 있다.
String[] arr = {"Kiwi","Orange","Banana","Watermelon"};
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
System.out.println("Sorted arr[] : " + Arrays.toString(arr));

위 코드가 조금 길어보인다면 Lambda를 사용하여 더 짧게 구현할 수 있다.
String[] arr = {"Kiwi","Orange","Banana","Watermelon"};
Arrays.sort(arr, (s1, s2) -> s1.length() - s2.length());
System.out.println("Sorted arr[] : " + Arrays.toString(arr));
'Java' 카테고리의 다른 글
[Java] Record Class (0) | 2023.01.27 |
---|---|
[Java] 상속(Inheritance) (0) | 2023.01.24 |
[Java] indexOf/lastIndexOF (0) | 2023.01.12 |
[Java] OOP(ObejectOrientedProgramming) (1) | 2022.12.05 |
[Java] Array (1) (0) | 2022.11.23 |