Posts JAVA sort 정렬하기
Post
Cancel

JAVA sort 정렬하기

SORT


오름차순, 내림차순 정렬

ArrayList를 이용해 정렬을 해보자

우선 단순히 숫자 배열을 만들어 오름차순과 내림차순으로 정렬하는 법을 살펴보겠다.
sort를 이용해 오름차순 정렬을 하려면
list.sort(null); 또는 list.sort(Comparator.naturalOrder());를 사용하면 된다.

내림차순 정렬은
list.sort(Comparator.reverseOrder());이다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.ArrayList;
import java.util.Comparator;
public class Compare {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1); list.add(4);
        list.add(6); list.add(2);
        list.add(5);

        list.sort(null);
        System.out.println("오름차순 : " + list.toString());
        list.sort(Comparator.naturalOrder());
        System.out.println("오름차순 : " + list.toString());
        list.sort(Comparator.reverseOrder());
        System.out.println("내림차순 : " + list.toString());
    }
}

실행결과

1
2
3
오름차순 : [1, 2, 4, 5, 6]
오름차순 : [1, 2, 4, 5, 6]
내림차순 : [6, 5, 4, 2, 1]



객체 정렬

그렇다면 임의로 만든 객체를 정렬할때는 어떻게 해야할까

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
class Number {
    private int x;
    private int y;

    public Number(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

예를들어 Number란 클래스가 있고 x와 y라는 값을 가진다고하자.

2개의 수를 가진 객체 배열을 만들어서
x^2 + y^2를 한 값을 기준으로 오름차순 정렬을 할 것이다.
만약 계산한 두 값이 같다면 x를 기준으로 오름차순 정렬을 한다.

이 경우의 코드는

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
arr.sort(new Comparator<Number>() {
    @Override
    public int compare(Number o1, Number o2) {
        int x1 = o1.getWn();
        int y1 = o1.getIn();
        int x2 = o2.getWn();
        int y2 = o2.getIn();

        int num1 = x1 * x1 + y1 * y1;
        int num2 = x2 * x2 + y2 * y2;

        if (num1 > num2)
            return 1;
        else if (num1 < num2)
            return -1;
        else {
            if (x1 > x2)
                return 1;
            else
                return -1;
        }
    }
});

이렇게 sort 함수안에 compare함수를 통해 정렬기준을 정해주면 된다.

정렬기준은

  • 기준이 되는 데이터보다 비교 데이터가 작다면 양수를 반환
  • 기준이 되는 데이터와 비교 데이터가 같다면 0을 반환
  • 기준이 되는 데이터보다 비교 데이터가 크다면 음수를 반환


전체코드

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
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

class Number {
    private int wn;
    private int in;

    public Number(int wn, int in) {
        this.wn = wn;
        this.in = in;
    }

    public void setWn(int wn) {
        this.wn = wn;
    }

    public void setIn(int in) {
        this.in = in;
    }

    public int getWn() {
        return wn;
    }

    public int getIn() {
        return in;
    }

    public String toString() {
        if (in < 0)
            return wn + " " + in + "i";
        else
            return wn + " + " + in + "i";
    }
}

public class ComplexNumber {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int num;
        List<Number> arr = new ArrayList<Number>();

        System.out.print("복소수의 수를 입력하라: ");
        num = scanner.nextInt();
        int sum1 = 0, sum2 = 0;
        for (int i = 1; i <= num; i++) {
            int a, b;
            System.out.print("복소수 " + i + "의 정보를 입력하라: ");
            a = scanner.nextInt();
            b = scanner.nextInt();
            arr.add(new Number(a, b));
            sum1 += a;
            sum2 += b;
        }

        arr.sort(new Comparator<Number>() {
            @Override
            public int compare(Number o1, Number o2) {
                int wn1 = o1.getWn();
                int in1 = o1.getIn();
                int wn2 = o2.getWn();
                int in2 = o2.getIn();

                int num1 = wn1 * wn1 + in1 * in1;
                int num2 = wn2 * wn2 + in2 * in2;

                if (num1 > num2)
                    return 1;
                else if (num1 < num2)
                    return -1;
                else {
                    if (wn1 > wn2)
                        return 1;
                    else
                        return -1;
                }
            }
        });

        PrintWriter pw = new PrintWriter("./ComplextNumbet.txt");
        pw.println("정렬 결과:");
        for (int i = 0; i < arr.size(); i++) {
            pw.println(arr.get(i).toString());
        }
        pw.println("\n합:");
        if (sum2 < 0)
            pw.println(sum1 + " " + sum2 + "i");
        else
            pw.println(sum1 + " + " + sum2 + "i");
        pw.close();
    }
}

JSP Servlet Redirect

JAVA MySql 연결을 위한 Connector 설치방법

Comments powered by Disqus.