728x90

클래스에서 정렬 재정의 방법 예시

- 기본 클래스(Main)안에 생성한 클래스(Lecture)을 넣는다.

- implements Comparable<>로 상속시키기.

- @Override로 compareTo 함수 재정의하기.

- 클래스는 배열 형태로 선언하기 Lecture[] lecture = new Lecture[N];

import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[])
    {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine()); 

            Lecture[] lecture = new Lecture[N];
            for(int i=0; i<N; i++){
                int[] lectureInfo = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
                lecture[i] = new Lecture(lectureInfo[0], lectureInfo[1], lectureInfo[1]-lectureInfo[0]);
            }
            
            Arrays.sort(lecture); // 정렬

            for(int i=0; i<N; i++){
                System.out.println(lecture[i].startTime+" "+lecture[i].endTime);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    static class Lecture implements Comparable<Lecture>{
        int startTime;
        int endTime;
        int duration;

        public Lecture(int startTime, int endTime, int duration){
            this.startTime = startTime;
            this.endTime = endTime;
            this.duration = duration;
        }

        @Override
        public int compareTo(Lecture o) {
            if(this.startTime == o.startTime) return this.duration - o.duration;
            else return this.startTime - o.startTime;
        }
    }
}

 

함수에서 정렬 재정의 방법 예시

- 정렬하는 변수의 타입에 따라 정렬 방법이 다른 것에 유의

- 함수에서 정렬을 재정의하는건 Comparator을 사용하며, 안에 들어가는 함수는 compare이다.

String[] str = {"1", "2", "3"};
Arrays.sort(str); // 오름차순
Arrays.sort(str, Collections.reverseOrder()); // 내림차순


ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
Collections.sort(list); // 오름차순
Collections.reverse(list); //  내림차순

Collections.sort(list, new Comparator<Integer>() { // 재정의
	@Override
    public int compare(Integer o1, Integer o2){
    	return o1 - o2;
    }
});
728x90

+ Recent posts