
1. Arrays.sort()
- 대상: int[], double[], String[] 같은 기본 배열과 Object[] 배열
- 내부 구현:
- 기본형 배열(int[], double[] 등): Dual-Pivot Quicksort (최적화된 퀵 정렬)
- 객체 배열(Object[]): Timsort (합병 정렬과 삽입 정렬의 조합)
- 특징:
- Comparable을 구현한 객체 배열 정렬 가능
- Comparator를 사용할 수도 있음
- 기본형 배열은 Comparator를 사용할 수 없음
📌 예제 1: 기본형 배열 정렬
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {5, 3, 8, 1, 2};
Arrays.sort(numbers); // 오름차순 정렬
System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 5, 8]
}
}
Arrays.sort()는 기본형 배열을 정렬할 때 Dual-Pivot Quicksort를 사용합니다.
📌 예제 2: 객체 배열 정렬 (Comparable 사용)
import java.util.Arrays;
class Person implements Comparable<Person> {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
return Integer.compare(this.age, o.age); // 나이 오름차순 정렬
}
@Override
public String toString() {
return name + "(" + age + ")";
}
}
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
};
Arrays.sort(people); // 나이 기준 오름차순 정렬
System.out.println(Arrays.toString(people));
// 출력: [Bob(25), Alice(30), Charlie(35)]
}
}
Arrays.sort()는 객체 배열을 정렬할 때 Timsort를 사용합니다.
📌 예제 3: 객체 배열 정렬 (Comparator 사용)
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
String[] words = {"banana", "apple", "cherry", "date"};
// 문자열 길이 기준 정렬
Arrays.sort(words, Comparator.comparingInt(String::length));
System.out.println(Arrays.toString(words)); // ["date", "apple", "banana", "cherry"]
}
}
Comparator를 사용하면 Comparable이 없어도 정렬 가능.
2. Collections.sort()
- 대상: List<T> (ArrayList, LinkedList 등)
- 내부 구현:
- Timsort 알고리즘 사용 (합병 정렬과 삽입 정렬 조합)
- 특징:
- Comparable을 구현한 객체를 정렬 가능
- Comparator를 이용해 사용자 정의 정렬 가능
📌 예제 4: 리스트 정렬 (Comparable 사용)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(1);
numbers.add(8);
numbers.add(3);
Collections.sort(numbers); // 오름차순 정렬
System.out.println(numbers); // [1, 3, 5, 8]
}
}
Collections.sort()는 내부적으로 List를 Array로 변환한 후 Arrays.sort()를 호출합니다.
📌 예제 5: 리스트 정렬 (Comparator 사용)
import java.util.*;
class Product {
String name;
int price;
public Product(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return name + "($" + price + ")";
}
}
public class Main {
public static void main(String[] args) {
List<Product> products = new ArrayList<>();
products.add(new Product("Laptop", 1200));
products.add(new Product("Phone", 800));
products.add(new Product("Tablet", 600));
// 가격 기준 오름차순 정렬
Collections.sort(products, Comparator.comparingInt(p -> p.price));
System.out.println(products);
// 출력: [Tablet($600), Phone($800), Laptop($1200)]
}
}
Comparator.comparingInt(p -> p.price)를 사용해 가격 기준으로 정렬.
3. Arrays.sort() vs Collections.sort() 차이점 정리
Arrays.sort() | Collections.sort() | |
대상 | 배열 (int[], String[], Object[] 등) | List<T> (ArrayList, LinkedList 등) |
기본 정렬 방식 | Dual-Pivot Quicksort (기본형) / Timsort (객체) | Timsort |
Comparable 사용 가능 | O | O |
Comparator 사용 가능 | 객체 배열만 가능 (Object[]) | O |
성능 | O(N log N) | O(N log N) |
🚀 어떤 걸 사용해야 할까?
- 배열을 정렬할 때 → Arrays.sort()
- 리스트를 정렬할 때 → Collections.sort()
- 객체 정렬이 필요할 때
- 배열이면 Arrays.sort()
- 리스트면 Collections.sort()
- 기본형 배열을 정렬할 때 → Arrays.sort() (훨씬 빠름, Comparator 사용 불가)
4. List.sort() (Java 8 이후)
- Collections.sort(list)는 내부적으로 list.sort(Comparator)를 호출하므로 Java 8 이후에는 list.sort()를 직접 사용하는 것이 더 효율적.
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Bob", "Alice", "Charlie");
names.sort(Comparator.naturalOrder()); // 오름차순 정렬
System.out.println(names); // [Alice, Bob, Charlie]
}
}
List.sort()가 Collections.sort()보다 가독성이 좋음.

- 배열 정렬 → Arrays.sort()
- 리스트 정렬 → Collections.sort() (Java 8 이상이면 list.sort())
- 객체 정렬 → Comparable 구현 or Comparator 사용
- 기본형 배열 정렬 → Arrays.sort()만 가능 (Comparator 사용 불가)
✅ 정렬 성능 차이는 거의 없지만, 자료구조에 맞는 정렬 메서드를 사용하는 것이 좋음!
'Back_End > JAVA' 카테고리의 다른 글
자바(JAVA)의 Default Interface란? (1) | 2025.02.28 |
---|---|
자바(JAVA) DAO, DTO, VO 란? (0) | 2025.02.26 |
자바(JAVA) Synchronized (0) | 2025.02.24 |
자바(Java) Optional 이란? (0) | 2025.02.14 |
얼리 리턴 패턴(Early Return Pattern) 이란? (0) | 2025.02.14 |