LinkedList는 Java의 자료구조 중 하나로, 리스트 형태로 데이터를 저장하고 관리할 때 유용합니다. 기본적으로 LinkedList는 삽입 순서대로 데이터를 저장하지만, 때로는 특정 규칙에 따라 데이터를 정렬하거나 관리해야 할 때가 있습니다. 이런 경우, Custom Comparator를 활용하면 매우 효과적으로 데이터를 정렬할 수 있습니다.
Custom Comparator란?
Comparator는 Java에서 객체를 비교하는 기준을 정의하는 인터페이스입니다. 기본적으로 제공되는 자연 정렬(String이나 Integer의 기본 정렬 방식) 외에도 개발자가 원하는 기준으로 데이터를 정렬할 수 있게 해줍니다.
LinkedList도 Comparator와 함께 사용하여 정렬 기준을 커스터마이징할 수 있습니다.
LinkedList 정렬 방법
LinkedList는 정렬 기능을 직접 제공하지 않지만, Collections.sort 또는 List.sort 메서드를 활용하여 데이터를 정렬할 수 있습니다. 특히, List.sort 메서드는 Comparator를 파라미터로 받아 정렬 규칙을 적용합니다.
코드 예제: 기본 정렬
아래 코드는 기본 알파벳 순서로 LinkedList를 정렬하는 방법을 보여줍니다.
import java.util.LinkedList;
import java.util.Arrays;
public class LinkedListSortExample {
public static void main(String[] args) {
// 초기 데이터 추가
LinkedList<String> linkedList = new LinkedList<>(Arrays.asList("Z", "A", "C"));
// 기본 알파벳 순으로 정렬
linkedList.sort(String::compareTo);
// 결과 출력
System.out.println(linkedList);
}
}
실행결과
위 코드에서 String::compareTo는 String 클래스의 기본 정렬 방식(사전 순)을 사용한 것입니다.
코드 예제: Custom Comparator 활용
커스터마이징된 정렬 기준을 정의하여 정렬을 수행할 수도 있습니다. 예를 들어, 문자열을 길이에 따라 정렬하거나 대소문자 구분 없이 정렬하려면 아래와 같이 구현할 수 있습니다.
1. 문자열 길이에 따른 정렬
import java.util.LinkedList;
import java.util.Arrays;
import java.util.Comparator;
public class LinkedListCustomSort {
public static void main(String[] args) {
// 초기 데이터 추가
LinkedList<String> linkedList = new LinkedList<>(Arrays.asList("Apple", "Dog", "Elephant", "Cat"));
// 문자열 길이에 따른 정렬
linkedList.sort(Comparator.comparingInt(String::length));
// 결과 출력
System.out.println(linkedList);
}
}
실행결과
위 코드에서는 Comparator.comparingInt를 사용하여 문자열의 길이에 따라 정렬했습니다.
2. 대소문자 구분 없이 정렬
import java.util.LinkedList;
import java.util.Arrays;
public class LinkedListIgnoreCaseSort {
public static void main(String[] args) {
// 초기 데이터 추가
LinkedList<String> linkedList = new LinkedList<>(Arrays.asList("banana", "Apple", "cherry"));
// 대소문자 구분 없이 정렬
linkedList.sort(String.CASE_INSENSITIVE_ORDER);
// 결과 출력
System.out.println(linkedList);
}
}
실행결과
여기서는 String.CASE_INSENSITIVE_ORDER를 사용해 대소문자를 무시하고 정렬했습니다.
활용 예시
- 대기열 관리
고객을 우선순위에 따라 정렬하려는 경우, 고객의 중요도나 도착 순서를 기준으로 Comparator를 커스터마이징하여 사용할 수 있습니다. - 작업 스케줄링
작업의 마감 기한이나 우선순위를 기준으로 LinkedList를 정렬하여 작업을 효율적으로 처리할 수 있습니다.
핵심 요약
- LinkedList 정렬은 sort 메서드와 함께 Comparator를 사용하여 커스터마이징할 수 있습니다.
- 기본 정렬 방식뿐 아니라 문자열 길이, 대소문자 무시, 사용자 정의 규칙 등 다양한 정렬 기준을 적용할 수 있습니다.
- LinkedList를 활용한 정렬은 대기열 관리, 스케줄링 등 실생활의 다양한 문제 해결에 활용될 수 있습니다.
추가 팁: Comparator의 메서드 체이닝
Comparator는 체이닝을 통해 다중 조건을 설정할 수 있습니다. 예를 들어, 문자열 길이로 먼저 정렬하고, 길이가 같은 경우 알파벳 순으로 정렬하려면 아래와 같이 구현할 수 있습니다.
linkedList.sort(Comparator.comparingInt(String::length).thenComparing(String::compareTo));
이처럼 Comparator를 활용하면 LinkedList의 데이터를 효율적이고 유연하게 정렬할 수 있습니다!
'Java > Java이론' 카테고리의 다른 글
Collections.synchronizedList() :멀티스레드 환경에서 안전한 리스트 사용하기 (1) | 2024.12.13 |
---|---|
Immutable List란? (0) | 2024.12.10 |
Java WeakHashMap 이해하기 (0) | 2024.11.25 |
ArrayDeque: 효율적인 양방향 데이터 처리 (0) | 2024.11.22 |
Java의 PriorityQueue: 우선순위 기반 큐 (0) | 2024.11.21 |