[JAVA] 정렬 - Arrays.sort(), Comparable, Comparator

개발자·2022년 7월 15일
0

자바에 대해서

목록 보기
1/1
post-thumbnail

Java 정렬

프로그래밍을 하다보면 정렬이 필요한 경우가 많습니다. 그래서 많은 언어에서는 정렬하는 기능을 지원해줍니다.

자바에서도 정렬하는 기능을 지원해주는데, 그중에서 3가지를 공부하고자 합니다.

Array.sort()

첫번째로 알아볼 것은 Array.sort() 메소드이며 배열을 정렬하는 가장 간단한 방법입니다.
Arrays 클래스를 사용하여 sort메소드를 사용하는 것입니다.

import java.util.Arrays

기본적으로 제공하는 자료형 배열(int, character, String 포함) 을 오름차순으로 정렬을 해줍니다.

예시

public static void main(String[] args) throws Exception{
        int[] num = {1,11,6,1212,5,10};
        Arrays.sort(num); // 1, 5, 6, 10, 11, 1212

        String[] str = {"a","abc","bce","b","c","wfaasd"};
        Arrays.sort(str); // a, abc, b, bce, c, wfaasd

    }

Comparable

두번째로 알아볼 것은 Comparable 입니다.
Comparable은 클래스의 정렬로, 인터페이스로 주어진 메소드를 반드시 구현해야만 합니다. 어떠한 클래스가 Comparable을 상속받았을 경우, 필요 메소드인 compareTo(T o1)를 구현한다면 같은 타입의 클래스간의 크기를 비교할 수 있습니다.

예시

class Number implements Comparable<Number>{
    int num;
    public Number(int num) {
        this.num = num;
    }

    @Override
    public int compareTo(Number o) {
        return this.num - o.num;
    }
}
public class test {
    public static void main(String[] args) throws Exception{
        Number[] numbers = new Number[]{new Number(5), new Number(10), new Number(1)};
        Arrays.sort(numbers);

        for(int i=0;i<numbers.length;i++){
            System.out.print(numbers[i].num + " ");
        }
    }
}

오름차순 뿐만 아니라 내림차순으로도 구현을 할 수 있으며,
클래스내의 여러값을 비교하여 정렬할 수 있습니다.

ArrayList<Number> list = new ArrayList<>();
Collections.sort(list);

Comparable을 상속한 클래스를 ArrayList를 이용하여 정의할 경우
다음과 같은 Collections의 sort 메소드를 사용하여 정렬 할 수 있습니다.

Comparator

마지막으로 알아볼 것은 Comparator입니다.
Comparator는 정렬하는 방법을 사용자가 정의하는 방법입니다. 또한 Comparable과 같이 인터페이스로 주어진 메소드를 반드시 구현해야만 합니다. 필요한 메소드는 compare(T o1, T o2) 입니다.

그렇다면 Comparable 과 Comparator의 차이는 무엇일까 ?

바로 두 메소드 compareTo(T o1)compare(T o1, T o2) 에 있습니다.
Comparable은 자기 자신과 매개변수 객체를 비교하는 것이며,
Comparator은 두 매개변수 객체를 비교한다는 것입니다.

예시

class Number implements Comparable<Number>{
    int num;
    public Number(int num) {
        this.num = num;
    }

    @Override
    public int compareTo(Number o) {
        return this.num - o.num;
    }
}

class sort implements Comparator<Number>{

    @Override
    public int compare(Number o1, Number o2) {
        return o2.num - o1.num;
    }
}
public class test {
    public static void main(String[] args) throws Exception{
        Number[] numbers = new Number[]{new Number(5), new Number(10), new Number(1)};
        Arrays.sort(numbers);
        for(int i=0;i<numbers.length;i++){
            System.out.print(numbers[i].num + " ");
        }
        
        Arrays.sort(numbers,new sort());
        for(int i=0;i<numbers.length;i++){
            System.out.print(numbers[i].num + " ");
        }
    }
}

0개의 댓글