본문으로 바로가기

02_ListSort

category HighJava 2020. 9. 17. 09:18


 정렬과 관련된 interface는 Comparable과 Comparator가 존재한다.

 보통 객체 자체에 정렬기능을 넣기 위해서는, Comparable을 구현하고

 정렬기준을 별도로 구현하고 싶을 때는 Comparator를 구현하여 사용한다.

 

 Comparable에서는 CompareTo() 메서드를 구현해야 하고,

 Comparator에서는 Compare() 메서드를 구현해야 한다.

 

 


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package kr.or.ddit.basic;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class T02_ListSortTest {
 
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("일자매");
        list.add("홍길동");
        list.add("성춘향");
        list.add("변학도");
        list.add("이순신");
        
        System.out.println("정렬 전 : " + list);
        
        //정렬은 Collection.sort() 메서드를 이용하여 정렬한다.
        //기본적으로 '오름차순 정렬'을 수행한다.
        
        //정렬방식을 변경하려면 정렬방식을 결정하는 객체를 만들어서
        //Collections.sort()메서드에 변수로 넘겨주면 된다.
        Collections.sort(list);
        System.out.println("정럴 후 : " + list);
        
        
        Collections.shuffle(list); // 데이터를 섞어 준다.
        System.out.println("자료 섞기 후 : " + list);
        
        //정렬방식을 결정하는 객체(결정자)를 이용하여 정렬하기
        Collections.sort(list, new Desc());
        System.out.println("정럴 후 : " + list);
    }
}
 
    /**
     * 정렬방식을 결정하는 class는 Comparator라는 인터페이스를 구현해야 한다.
     * Comparator 인터페이스의 compare() 메서드를 재정의 하여 구현하면 된다.
     */
 
class Desc implements Comparator<String>{
    
    /**
     * compare() 메서드의 반환값을 결정하는 방법
     * => 메서드가 양수를 반환하면 두 값의 순서가 바뀐다. (오름차순이 기본임)
     * 
     *  -오름차순 정렬일 경우...
     *  => 앞의 값이 크면 양수, 같으면 0 , 앞의 값이 작으면 음수를 반환하도록 한다.
     *  
     *  -String객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데
     *  이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
     *  (Wrapper클래스와 Date, File클래스에도 구현되어 있다.)
     */
    
    @Override
    public int compare(String str1, String str2) {
                
        return str1.compareTo(str2) * 1;
    }
    
}
cs


'HighJava' 카테고리의 다른 글

06_로또번호추첨기  (0) 2020.09.17
05_Set  (1) 2020.09.17
04_학생성적관리  (3) 2020.09.17
03_ListSort2  (0) 2020.09.17
01_StackQueue  (3) 2020.09.16