본문 바로가기

old/Programming

자바 comparator 사용법

반응형

계층구조

package: java.util.Comparator

정의

compare메서드를 사용해서 여러가지 특별한 조건을 가진 정렬을 구현하기 위한 인터페이스.
예를 들어, 사이즈별로 오름차순으로 정렬하고, 같은 사이즈들 파일이름을 내림차순으로 정렬할수 있음.

compare() 메서드에 대하여

compare 메서드는 양수가 나오면 두 피라미터의 위치를 바꾸며, 그외에는 아무것도 하지 않습니다.

조건식 리턴값
첫번째 피라미터 < 두번째 피라미터 음수
첫번째 피라미터 == 두번째 피라미터 0
첫번째 피라미터 > 두번째 피라미터 양수

사용법

MyComparator implements Comparator<>

MyComparator myComparator = new MyComparator();
Arrays.sort(array, myComparator);
Collections.sort(list, myComparator);

Java 예제

import java.awt.*;
import java.util.Comparator;

public class MyComparator implements Comparator<Point> {

    public int compare(Point p1, Point p2) {
        if (p1.x > p2.x) {
            return 1; // x를 기준으로 오름차순
        } else if (p1.x == p2.x) {
            if (p1.y < p2.y) { // y를 기준으로 내림차순
                return 1;
            }
        }
        return -1;
    }
}
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;


public class Main {
    public static void main(String[] args) {

        List<Point> pointList = new ArrayList<>();
        pointList.add(new Point(10, 10));
        pointList.add(new Point(1, 8));
        pointList.add(new Point(5, 2));
        pointList.add(new Point(1, 2));
        pointList.add(new Point(5, 5));
        pointList.add(new Point(10, 1));

        System.out.println("current list");
        for (Point temp : pointList) {
            System.out.println("x: " + temp.x + "  " + "y: " + temp.y);
        }

        MyComparator myComparator = new MyComparator();
        Collections.sort(pointList, myComparator);

        System.out.println("sorted list");
        for (Point temp : pointList) {
            System.out.println("x: " + temp.x + "  " + "y: " + temp.y);
        }

    }

}

결과

current list
x: 10  y: 10
x: 1  y: 8
x: 5  y: 2
x: 1  y: 2
x: 5  y: 5
x: 10  y: 1
sorted list
x: 1  y: 8
x: 1  y: 2
x: 5  y: 5
x: 5  y: 2
x: 10  y: 10
x: 10  y: 1
반응형