본문 바로가기

개발

Java - Comparator와 Comparable

반응형

규칙! 음수를 리턴하면 자리 바꿈. 0 또는 양수를 리턴하면 자리 안바꿈
 그래서
   오름차순 할때 : 오른쪽이 크면 음수 (오른쪽이 앞쪽 인덱스)
   내림차순 할때 : 왼쪽이 크면 음수 (오른쪽이 앞쪽 인덱스)

1. Comparator 인터페이스 구현 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student{
    String name;
    int math;
    int science;

    Student(String name, int math, int science){
        this.name = name;
        this.math = math;
        this.science = science;
    }
}

public class CollectionMain {
    public static void main(String [] args){
    
        List<Student> studentList = new ArrayList<Student>();
        studentList.add(new Student("A", 20, 30));
        studentList.add(new Student("B", 40, 50));
        studentList.add(new Student("C", 30, 30));

        Collections.sort(studentList, new Comparator<Student>() {
            @Override
            // o1 앞에거 o2 뒤에꺼
            // 리턴 음수 : 바꾸기
            // 리턴 양수 : 그대로
            public int compare(Student o1, Student o2) {
            	// 큰 것이 위로
                if(o1.science < o2.science)
                    return 1;
                else if(o1.science > o2.science)
                    return -1;
                else{
                	// 과학 점수가 같으면 수학점수 확인
                    if(o1.math < o2.math){
                        return 1;
                    }else{
                        return -1;
                    }
                }
            }
        });

        for (Student tmp : studentList
             ) {
            System.out.println(tmp.name);
        }
    }

}

 

2. Comparable 인터페이스 구현

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student2 implements Comparable<Student2>{
    String name;
    int math;
    int science;

    Student2(String name, int math, int science){
        this.name = name;
        this.math = math;
        this.science = science;
    }

    @Override
    public int compareTo(Student2 o) {

        if(this.science < o.science)
            return 1;
        else if(this.science > o.science)
            return -1;
        else{
            if(this.math < o.math){
                return 1;
            }else{
                return -1;
            }
        }
    }
    

public class CollectionMain {
    public static void main(String [] args){

        List<Student2> studentList2 = new ArrayList<Student2>();
        studentList2.add(new Student2("A", 20, 30));
        studentList2.add(new Student2("B", 40, 50));
        studentList2.add(new Student2("C", 30, 30));

        Collections.sort(studentList2);

        for (Student2 tmp : studentList2
        ) {
            System.out.println(tmp.name);
        }


    }

}

}

 

반응형

'개발' 카테고리의 다른 글

Java - TreeSet  (0) 2021.06.06
Java - HashSet  (0) 2021.06.06
Java - Arrays  (0) 2021.06.06
Java - 스택과 큐 (Stack & Queue)  (0) 2021.06.06
Java - LinkedList  (0) 2021.06.06