[JAVA] List 정렬 방법

서버 혹은 내부에서  데이터를 가져와 여러가지 처리를 하는 경우가 많습니다. 만약 가져온 데이터가 정렬없이 뒤죽박죽 되어 있다면 사용자들로 하여금 불편을 초래 할수도 있게 됩니다.
이런 경우 가져온 데이터에 대해서 한번더 정렬을 하는 과정을 거칠 필요가 있습니다. 이번 포스팅에서는 이럴때 사용되는 정렬방법 중 Collections.sort를 사용한 방법에 대해서 알아보도록 하겠습니다.
Collections으로 되어 있기 때문에 Collection을 가지고 있는 List,Map등에서 사용 할수 있습니다. 여기서는 List를 예로 설명 해드리겠습니다. List에 몇개의 샘플 데이터를 넣은 후 이 데이터를 정렬 후 다시 출력하는 간단한 샘플입니다.

1.UserInfo 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class UserInfo {
    
    /**
     * order seq
     */
    private int seq;
    
    /**
     * 이름
     */
    private String name;
    
    /**
     * 전화 번호
     */
    private String phoneNumber;
 
    @Override
    public String toString() {
        return "UserInfo [seq=" + seq + ", name=" + name + ", phoneNumber=" + phoneNumber + "]";
    }
 
    public int getSeq() {
        return seq;
    }
 
    public void setSeq(int seq) {
        this.seq = seq;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPhoneNumber() {
        return phoneNumber;
    }
 
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
cs


2.main 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
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
 
 
public class ListCollectionSort {
    
    public static void main(String[] args) {
        
        List<UserInfo> userList = new ArrayList<>();
        
        UserInfo userItem = new UserInfo();
        userItem.setSeq(5);
        userItem.setName("갑돌이");
        userItem.setPhoneNumber("010-1234-5678");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(3);
        userItem.setName("홍길동");
        userItem.setPhoneNumber("010-9999-1234");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(8);
        userItem.setName("아무개");
        userItem.setPhoneNumber("010-5555-1234");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(1);
        userItem.setName("갑순이");
        userItem.setPhoneNumber("010-7777-5678");
        userList.add(userItem);
        
        
        System.out.println("*정렬 하기전 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareNameDesc());
        System.out.println("\n\n*String 내림차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareNameAsc());
        System.out.println("\n\n*String 오름차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareSeqDesc());
        System.out.println("\n\n*Int 내림차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        
        Collections.sort(userList,new CompareSeqAsc());
        System.out.println("\n\n*Int 오름차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
    }
    
    
    /**
     * String으로 내림차순(Desc) 정렬
     * @author Administrator
     *
     */
    static class CompareNameDesc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o2.getName().compareTo(o1.getName());
        }        
    }
    
    /**
     * String으로 오름차순(Asc) 정렬
     * @author Administrator
     *
     */
    static class CompareNameAsc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getName().compareTo(o2.getName());
        }        
    }
    
    /**
     * int로 내림차순(Desc) 정렬
     * @author Administrator
     *
     */
    static class CompareSeqDesc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getSeq() > o2.getSeq() ? -1 : o1.getSeq() < o2.getSeq() ? 1:0;
        }        
    }
    
    /**
     * int로 오름차순(Asc) 정렬
     * @author Administrator
     *
     */
    static class CompareSeqAsc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getSeq() < o2.getSeq() ? -1 : o1.getSeq() > o2.getSeq() ? 1:0;
        }        
    }
}
cs


3.실행결과

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
*정렬 하기전 리스트
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
 
 
*String 내림차순 정렬 후 리스트
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
 
 
*String 오름차순 정렬 후 리스트
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
 
 
*Int 내림차순 정렬 후 리스트
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
 
 
*Int 오름차순 정렬 후 리스트
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
cs


간단한 코드이므로 추가 설명은 필요 없을것 같습니다. 각각의 상황에 맞게 compare부분의 값만 변경하셔서 사용 하시면 됩니다.


출처: http://kanzler.tistory.com/63 [kanzler의 세상 이야기]



[Java] ArrayList 정렬

  • ArrayList를 오름차순 또는 내림차순으로 정렬하는 방법입니다.
  • Collections.sort() 를 사용(오름차순 정렬)합니다.
  • 내림차순으로 정렬할 떄는 Comparator< > 인터페이스를 구현해서 추가합니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ArrayListSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ArrayList<Integer> integerList = new ArrayList<Integer>();
        ArrayList<String> stringList = new ArrayList<String>();

        // 입력
        for (int i = 9; i >= 0; i--) {
            integerList.add(i);
        }

        stringList.add("ZZZ");
        stringList.add("YYY");
        stringList.add("XXX");
        stringList.add("WWW");
        stringList.add("VVV");

        // 출력
        System.out.println("<정렬전>");
        print1(integerList);
        print2(stringList);
        System.out.println();

        // 오름차순 정렬
        Collections.sort(integerList);
        Collections.sort(stringList);

        // 출력
        System.out.println("\n<오름차순>");
        print1(integerList);
        print2(stringList);

        // 내림차순 정렬
        Collections.sort(integerList, new AscendingInteger());
        Collections.sort(stringList, new AscendingString());

        // 출력
        System.out.println("\n<내림차순>");
        print1(integerList);
        print2(stringList);

    }

    public static void print1(ArrayList<Integer> list) {

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
    }

    public static void print2(ArrayList<String> list) {

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
    }
}

class AscendingInteger implements Comparator<Integer> {

    @Override
    public int compare(Integer a, Integer b) {

        return b.compareTo(a);
    }
}

class AscendingString implements Comparator<String> {

    @Override
    public int compare(String a, String b) {

        return b.compareTo(a);
    }
}

결과

<정렬전>
9 8 7 6 5 4 3 2 1 0
ZZZ YYY XXX WWW VVV
<오름차순>
0 1 2 3 4 5 6 7 8 9
VVV WWW XXX YYY ZZZ
<내림차순>
9 8 7 6 5 4 3 2 1 0
ZZZ YYY XXX WWW VVV


출처: http://allg.tistory.com/12 [프로그래밍 해볼까]

댓글