java.util.Arrays 유틸리티 클래스를 사용하면 배열(Array)을 정렬, 복제하거나 List로 변환하는 등의 작업을 쉽게 처리할 수 있다. 해당 클래스의 sort() 매서드를 사용하면 쉽게 오름차순 정렬리 가능하다. sort()매서드는 클래스 매서드로써 Arrays 클래스의 인스턴스 생성없이 바로 사용하면 된다.

 

기본 정렬조건이 오름차순인 이유는 Class 내에 기본적으로 구현되어있는 Comparable 인터페이스의 compareTo 메서드를 기준으로 하기 때문이다. Java에서 인스턴스를 서로 비교하는 클래스들은 모두 Comparable 인터페이스가 구현되어 있다.

ex) A.compareTO(B)
   A==B // 같으면 0 반환
   A>B // A가 더 크면 1 반환
   A<B // B가 더 크면 -1 반환

 

Arrays.sort() 사용

int[] intarr = new int[] {1, 5, 4, 2, 3};

Arrays.sort(intarr); // 1 2 3 4 5

Arrays.sort(intarr,2,5); // intarr[2]~intarr[4]의값 4,2,3 만 정렬 : 1 5 2 3 4

 

내림차순이나 원하는대로 조건을 달리하고 싶을 때에는 Class내에 구현되어있는

1. Comparable 인터페이스의 compareTo() 메서드를 원하는 조건으로 오버라이드하거나,

2. 익명인터페이스 java.util.Comparator를 구현한 Class내 compare() 메서드를 원하는 정렬조건으로 오버라이드하여

sort 메서드 호출 시 구현한 Comparator 클래스를 명시해주면 된다.

 

주의할 점은 byte, char, double, short, long, int, float같은 PrimitiveType의 배열에는 적용이 불가능하니 Integer같은 Wrapper "Class"를 이용하셔야 한다는 점!!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Custom implements Comparator<Player> {
    @Override
    public int compare(Player o1, Player o2) {
        // TODO Auto-generated method stub
        if(o1.score < o2.score) {
            return 1;
        }
        else if(o1.score == o2.score) {
            if((o1.name).compareTo(o2.name) < 0) {
                return -1;
            }
            else if((o1.name).compareTo(o2.name) > 0) {
                return 1;
            }
            else return 0;
        }
        return -1;
    }
}
class Player{
    String name;
    int score;
    
    Player(String name, int score){
        this.name = name;
        this.score = score;
    }
}
cs

위 예제는 score 내림차순으로 정렬하되, score값이 같으면 name 오름차순으로 정렬하도록 compare 메서드를 커스터마이징한 것이다.

 

1
2
3
4
5
6
class Custom implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        return o2.compareTo(o1);
    }
}
cs

위 예제는 내림차순으로 정렬하도록 구현한 것이다.

사용할때에는

1
2
String arr = new String[] {"A","B","C","D","E"};
Arrays.sort(arr, new Custom);
cs

이런식으로 사용하면 E D C B A 순으로 정렬된다.

 

***출처***

https://ifuwanna.tistory.com/232

+ Recent posts