티스토리 뷰
Arrays.sort()를 사용하면 배열을 오름차순 또는 내림차순으로 정렬 할 수 있습니다.
자료형에 따라서 다음과 같은 배열들이 있으며, 모두 Arrays.sort()로 정렬할 수 있습니다.
- "기본 자료형(int 등)" 배열
- 문자열 배열
- 객체 배열
각 케이스 별 예제 코드를 확인해보면서 정렬에 대해서 알아보겠습니다.
기본 자료형 배열 정렬(오름차순)
기본 자료형은 int, float 같은 자료형을 말합니다. 아래와 같이 int 배열을 Arrays.sort()로 정렬할 수 있습니다.
- Arrays.sort(배열)은 배열을 정렬합니다. (원본 배열의 순서가 변경됨)
- 기본적으로 오름차순으로 정렬합니다.
- 정렬된 결과를 출력해보면, 원본 배열이 오름차순으로 변경된 것을 확인할 수 있습니다.
import java.util.Arrays;
public class Example1 {
public static void main(String[] args) {
int[] numbers = {5, 3, 8, 1, 2, 7};
// 배열 정렬
Arrays.sort(numbers);
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(numbers));
}
}
Output:
Sorted array: [1, 2, 3, 5, 7, 8]
기본 자료형 배열 정렬(내림차순)
Arrays.sort(배열, Collections.reverseOrder())는 역순으로 정렬합니다. 즉, Arrays.sort(배열)가 정렬하는 반대 방향으로 정렬하게 됩니다.
- sort()에 Collections.reverseOrder()를 인자로 전달하려면 배열은 int[]가 아닌 Integer[] 처럼, 기본 자료형의 클래스로 객체가 선언되어야 합니다.
- 결과를 보면 내림차순으로 정렬된 것을 볼 수 있습니다.
import java.util.Arrays;
import java.util.Collections;
public class Example2 {
public static void main(String[] args) {
Integer[] numbers = {5, 3, 8, 1, 2, 7};
// 배열 정렬
Arrays.sort(numbers, Collections.reverseOrder());
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(numbers));
}
}
Output:
Sorted array: [8, 7, 5, 3, 2, 1]
문자열 배열 정렬(오름차순)
문자열 배열도 위와 동일하게 정렬할 수 있습니다. 아래 예제는 오름차순으로 문자열을 정렬합니다. 문자열 정렬은 기본적으로 대문자가 소문자보다 작고(사전상 순서가 앞), A가 Z보다 작습니다(사전상 순서가 앞)
import java.util.Arrays;
import java.util.Collections;
public class Example3 {
public static void main(String[] args) {
String[] fruits = {"Orange", "Apple", "Banana", "Pineapple"};
// 배열 정렬
Arrays.sort(fruits);
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(fruits));
}
}
Output:
Sorted array: [Apple, Banana, Orange, Pineapple]
문자열 배열 정렬(내림차순)
Collections.reverseOrder()를 인자로 전달하여 내림차순으로 정렬할 수 있습니다.
import java.util.Arrays;
import java.util.Collections;
public class Example4 {
public static void main(String[] args) {
String[] fruits = {"Orange", "Apple", "Banana", "Pineapple"};
// 배열 정렬
Arrays.sort(fruits, Collections.reverseOrder());
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(fruits));
}
}
Output:
Sorted array: [Pineapple, Orange, Banana, Apple]
객체 배열 정렬(오름차순)
객체 배열도 위와 같이 정렬할 수 있습니다. 하지만 객체의 경우, int나 String과 다르게 어떤 객체의 순서가 먼저인지 알기 어렵기 때문에, 순서를 결정하는 로직을 클래스 내부의 compareTo() 함수에 구현해줘야 합니다.
- Person 클래스의 compareTo(Person other)는 정렬할 때, 두 객체들 중에서 어떤 것이 빠른지 순서를 결정하는 로직입니다.
- compareTo()를 보면 A 객체와 B 객체의 age의 차를 리턴하는데, 음수는 A가 B보다 작음, 양수는 A가 B보다 큼, 0은 A와 B가 같음을 의미합니다. 따라서 this.age가 작으면 음수를 리턴하며 this.age가 더 작다는 것을 의미합니다.
import java.util.Arrays;
public class Example5 {
public static void main(String[] args) {
Person[] people = {
new Person("John", 25),
new Person("Jane", 22),
new Person("Tom", 28)
};
// 배열 정렬
Arrays.sort(people);
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(people));
}
static class Person implements Comparable<Person> {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return this.age - other.age; // 나이순 정렬
}
@Override
public String toString() {
return name + ": " + age;
}
}
}
Output:
Sorted array: [Jane: 22, John: 25, Tom: 28]
객체 배열 정렬(내림차순)
내림차순으로 정렬하려면 위와 동일하게 Collections.reverseOrder()를 인자로 전달하여, 기존 정렬 규칙을 반대로 적용하면 됩니다.
import java.util.Arrays;
import java.util.Collections;
public class Example6 {
public static void main(String[] args) {
Person[] people = {
new Person("John", 25),
new Person("Jane", 22),
new Person("Tom", 28)
};
// 배열 정렬
Arrays.sort(people, Collections.reverseOrder());
// 정렬된 배열 출력
System.out.println("Sorted array: " + Arrays.toString(people));
}
static class Person implements Comparable<Person> {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return this.age - other.age; // 나이순 정렬
}
@Override
public String toString() {
return name + ": " + age;
}
}
}
Output:
Sorted array: [Tom: 28, John: 25, Jane: 22]
'개발 > Java' 카테고리의 다른 글
[Java] replace() vs replaceAll() 차이점 (0) | 2024.06.30 |
---|---|
[Java] for문에서 마지막 콤마 제거(출력 안함) (0) | 2023.10.14 |
[Java] 문자열 앞자리 0 제거 (1) | 2023.10.14 |
- 다크스텀프
- java
- 파이썬
- 주황버섯
- 메이플랜드
- DART
- android
- 리스본
- 안드로이드
- adb
- Flutter
- 마비노기 모바일
- Skia
- 포르투
- 티스토리챌린지
- 오블완
- Unreal Engine
- 파란버섯
- 원숭이의숲
- 모루정원
- 와일드보어의 땅
- aosp 빌드
- javascript
- 포르투갈
- 12e 트램
- 나무던전
- 15e 트램
- 리스보아 카드
- 와보땅
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |