
프로그래밍을 시작하면 가장 자주 접하게 되는 구조 중 하나가 배열과 리스트입니다. 특히 **자바(Java)**에서는 정렬(Sorting)을 통해 데이터를 원하는 순서로 가공하는 경우가 매우 많습니다. 오늘은 자바 배열과 리스트 정렬에 대해 간단하면서도 실무에 바로 적용 가능한 방법을 정리해보겠습니다.
1. 배열과 리스트, 무엇이 다를까?
자바에서는 데이터를 저장할 수 있는 여러 구조가 있지만, 가장 많이 쓰이는 두 가지가 바로 **배열(Array)**과 **리스트(List)**입니다.
- 배열은 고정된 크기의 자료구조로, 생성 시 크기를 지정해야 합니다.
- 리스트는 크기가 유동적인 동적 자료구조로, ArrayList, LinkedList 등으로 구현됩니다.
정렬 방식은 이 두 구조에서 각각 다르게 접근해야 합니다.
2. 자바 배열 정렬: Arrays.sort()
배열은 java.util.Arrays 클래스의 sort() 메서드를 통해 간단하게 정렬할 수 있습니다.
import java.util.Arrays;
int[] numbers = {5, 3, 8, 1};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers)); // [1, 3, 5, 8]
문자열 배열도 동일하게 정렬됩니다. 기본적으로 오름차순 정렬이며, 기본 타입 배열은 성능이 매우 뛰어납니다.
3. 자바 리스트 정렬: Collections.sort()
리스트는 java.util.Collections 클래스의 sort() 메서드를 사용합니다.
import java.util.*;
List<Integer> list = Arrays.asList(5, 3, 8, 1);
Collections.sort(list);
System.out.println(list); // [1, 3, 5, 8]
또는 Java 8 이후부터는 List.sort() 메서드도 사용할 수 있습니다.
list.sort(Comparator.naturalOrder());
4. 사용자 정의 정렬 예제
정렬 기준을 커스터마이징하고 싶다면, Comparator를 직접 정의해 사용할 수 있습니다.
List<String> names = Arrays.asList("Kim", "Lee", "Park");
names.sort((a, b) -> b.compareTo(a)); // 내림차순
System.out.println(names); // [Park, Lee, Kim]
객체를 정렬할 때도 Comparator 또는 Comparable 인터페이스를 구현해야 합니다.
5. 정렬 시 주의할 점
- Arrays.sort()와 Collections.sort()는 안정 정렬이 아닐 수 있습니다.
- 정렬 대상이 null을 포함하는 경우 NullPointerException이 발생할 수 있으므로 주의가 필요합니다.
- 정렬 후 기존 데이터 순서가 바뀌므로, 원본이 필요하다면 먼저 복사해두는 것이 좋습니다.
✅ 마무리
자바 배열과 리스트 정렬은 데이터를 원하는 형태로 가공할 수 있는 기본 중의 기본입니다.
오름차순, 내림차순은 물론이고, 사용자 정의 정렬까지 익혀두면 실무에서 데이터를 더 유연하게 다룰 수 있습니다.
Arrays.sort()와 Collections.sort()를 상황에 맞게 활용해보세요.