본문 바로가기
Java/Java이론

LinkedList와 Custom Comparator를 활용한 정렬 방법

by P_eli 2024. 12. 15.
728x90
반응형

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를 사용해 대소문자를 무시하고 정렬했습니다.

 

활용 예시

  1. 대기열 관리
    고객을 우선순위에 따라 정렬하려는 경우, 고객의 중요도나 도착 순서를 기준으로 Comparator를 커스터마이징하여 사용할 수 있습니다.
  2. 작업 스케줄링
    작업의 마감 기한이나 우선순위를 기준으로 LinkedList를 정렬하여 작업을 효율적으로 처리할 수 있습니다.

핵심 요약

  1. LinkedList 정렬은 sort 메서드와 함께 Comparator를 사용하여 커스터마이징할 수 있습니다.
  2. 기본 정렬 방식뿐 아니라 문자열 길이, 대소문자 무시, 사용자 정의 규칙 등 다양한 정렬 기준을 적용할 수 있습니다.
  3. LinkedList를 활용한 정렬은 대기열 관리, 스케줄링 등 실생활의 다양한 문제 해결에 활용될 수 있습니다.

추가 팁: Comparator의 메서드 체이닝

Comparator는 체이닝을 통해 다중 조건을 설정할 수 있습니다. 예를 들어, 문자열 길이로 먼저 정렬하고, 길이가 같은 경우 알파벳 순으로 정렬하려면 아래와 같이 구현할 수 있습니다.

linkedList.sort(Comparator.comparingInt(String::length).thenComparing(String::compareTo));

이처럼 Comparator를 활용하면 LinkedList의 데이터를 효율적이고 유연하게 정렬할 수 있습니다!

728x90
반응형