JAVA/포스팅

자바 컬렉션 프레임워크 Comparator

짜집퍼박사(짜박) 2023. 11. 18. 10:55

Comparator는 Java 컬렉션 프레임워크에서 사용되는 비교자 인터페이스입니다. 이 인터페이스를 구현하여 객체 간의 비교 방법을 정의할 수 있습니다. Comparator는 주로 정렬이나 검색과 같은 작업에서 사용됩니다.

 

Comparator 인터페이스의 주요 메서드

 

1. compare(T o1, T o2)

두 객체를 비교합니다. 이 메서드는 두 객체의 순서를 결정합니다.

public interface Comparator<T> {
    int compare(T o1, T o2);
}

compare 메서드는 다음과 같은 규칙을 따릅니다.

 

- o1이 o2보다 작으면 음수를 반환.
- o1이 o2와 같으면 0을 반환.
- o1이 o2보다 크면 양수를 반환.

 

2. equals(Object obj)

Comparator 객체의 동등성을 확인하는 메서드입니다. 기본적으로 Comparator는 동등성을 비교하는 데 사용되지 않으므로, 보통 null이나 다른 타입의 Comparator와의 동등성을 검사하는 등의 특별한 상황에서만 구현됩니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student {
    private String name;
    private int age;

    // 생성자, 게터, 세터 등은 생략

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("Alice", 20));
        studentList.add(new Student("Bob", 22));
        studentList.add(new Student("Charlie", 18));

        // 이름을 기준으로 정렬하는 Comparator
        Comparator<Student> nameComparator = Comparator.comparing(Student::getName);
        Collections.sort(studentList, nameComparator);
        System.out.println("Sorted by name: " + studentList);

        // 나이를 기준으로 역순으로 정렬하는 Comparator
        Comparator<Student> ageComparator = Comparator.comparingInt(Student::getAge).reversed();
        Collections.sort(studentList, ageComparator);
        System.out.println("Sorted by age (descending): " + studentList);
    }
}

이 예제에서는 Comparator.comparing 메서드를 사용하여 객체의 특정 필드에 대한 비교자를 만들고, reversed() 메서드를 사용하여 역순 정렬 비교자를 생성합니다. 이러한 비교자들을 사용하여 Collections.sort 메서드로 리스트를 정렬합니다.

Comparator를 사용하면 객체의 정렬 방법을 유연하게 변경할 수 있습니다. 이는 특히 객체가 여러 속성을 가지고 있는 경우 유용합니다.

 

With ChatGPT