[java] Comparator와 Comparable

JH·2024년 4월 9일

java

목록 보기
18/21

Java의 Comparator 인터페이스

Java에서 Comparator 인터페이스는 두 객체를 비교하는 데 사용되는 메소드를 정의합니다. 이 인터페이스는 주로 객체의 리스트나 배열을 사용자 정의 순서로 정렬하는 데 사용됩니다.

Comparator 인터페이스의 메소드

Comparator 인터페이스를 구현하려면 compare(T o1, T o2) 메소드를 정의해야합니다.

  • compare(T o1, T o2): 두 객체 o1o2를 비교하고, o1o2보다 작으면 음수, 같으면 0, 크면 양수를 반환합니다.

Comparator 인터페이스 사용 예제

  1. 객체 내에서 사용
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

class MyClass implements Comparator<MyClass>{
    int x;
    int y;

    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    @Override
    public String toString() {
        return "MyClass{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }

    @Override
    public int compare(MyClass o1, MyClass o2) {
        if(o1.x == o2.x){
            return o1.y - o2.y;
        }
        return o1.x - o2.x;
    }
}

public class Main {
    public static void main(String[] args) {
        List<MyClass> list = new ArrayList<>();
        list.add(new MyClass(1, 3));
        list.add(new MyClass(2, 5));
        list.add(new MyClass(3, 9));
        list.add(new MyClass(2, 4));

        list.sort();
    }
}

위 예제를 실행한 결과는 아래와 같습니다.

MyClass{x=1, y=3}
MyClass{x=2, y=4}
MyClass{x=2, y=5}
MyClass{x=3, y=9}
  1. sort() 메소드 안에서 사용
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

class MyClass {
    int x;
    int y;

    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "MyClass{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<MyClass> list = new ArrayList<>();
        list.add(new MyClass(1, 3));
        list.add(new MyClass(2, 5));
        list.add(new MyClass(3, 9));
        list.add(new MyClass(2, 4));

        list.sort(new Comparator<MyClass>() {
            @Override
            public int compare(MyClass o1, MyClass o2) {
                if (o1.x == o2.x) {
                    return o1.y - o2.y;
                }
                return o1.x - o2.x;
            }
        });

        for (MyClass myClass : list) {
            System.out.println(myClass.toString());
        }
    }
}

위 예제를 실행한 결과는 아래와 같습니다.

MyClass{x=1, y=3}
MyClass{x=2, y=4}
MyClass{x=2, y=5}
MyClass{x=3, y=9}

Java의 Comparable 인터페이스

Java에서 Comparable 인터페이스는 객체를 서로 비교할 수 있는 기능을 제공합니다. 이 인터페이스를 구현하는 클래스는 객체의 자연 순서를 정의할 수 있습니다.

Comparable 인터페이스의 메소드

Comparable 인터페이스는 하나의 메소드를 정의합니다

  • compareTo(T o): 현재 객체와 주어진 객체 o를 비교하고, 현재 객체가 o보다 작으면 음수, 같으면 0, 크면 양수를 반환합니다.

Comparable 인터페이스 사용 예제

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

class MyClass implements Comparable<MyClass> {
    int x;
    int y;

    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "MyClass{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }

    @Override
    public int compareTo(MyClass o) {
        if (this.x == o.x) {
            return this.y - o.y;
        }
        return this.x - o.x;
    }
}

public class Main {
    public static void main(String[] args) {
        List<MyClass> list = new ArrayList<>();
        list.add(new MyClass(1, 3));
        list.add(new MyClass(2, 5));
        list.add(new MyClass(3, 9));
        list.add(new MyClass(2, 4));

        Collections.sort(list);

        for (MyClass myClass : list) {
            System.out.println(myClass.toString());
        }
    }
}

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다

MyClass{x=1, y=3}
MyClass{x=2, y=4}
MyClass{x=2, y=5}
MyClass{x=3, y=9}
profile
발전하는 백엔드 개발자

0개의 댓글