1. Comparable ( java.lang.Comparable )
https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html클래스의 기본 정렬에 따라 정렬해주는 인터페이스이다.
Integer, Double 등 클래스의 경우는 오름차순으로, String 클래스의 경우 사전으로 정렬해준다.
return값이 0이나 음수이면 자리를 바꾸지않고, 양수이면 자리를 변경한다.
기본은 오름차순인데 내림차순으로 정렬하고 싶으면 변수의 순서를 바꿔주면 된다.
import java.util.Arrays;
public class Exam_sort {
public static void main(String[] args) {
Student student[] = new Student[5];
//순서대로 "이름", 입학년도
student[0] = new Student("KIM", 2012);
student[1] = new Student("LEE", 2011);
student[2] = new Student("CHO", 2015);
student[3] = new Student("BAK", 2009);
student[4] = new Student("PANG", 2017);
Arrays.sort(student); //내부적으로 오버라이딩을 구현한 메소드를 호출한다.
for(int i=0;i<5;i++) //toString에 정의된 형식으로 출력
System.out.println(student[i]);
}
}
class Student implements Comparable<Student> {
String name; //이름
int year; //입학년도
public Student(String name, int year){
this.name = name;
this.year = year;
}
public String toString(){
return "이름: "+name+", 입학년도 : "+year;
}
/*@Override
public int compareTo(Student student) {
//return Integer.compare(year, student.year); //입학년도 기준으로 오름차순 정렬
//return Integer.compare(student.year, year); //입학년도 기준으로 내림차순 정렬
}*/
@Override
public int compareTo(Student student) {
return name.compareTo(student.name); // 이름순으로 기준으로 오름차순 정렬
//return student.getName().compareTo(name); // 이름순으로 기준으로 내림차순 정렬
}
}
2. Comparator ( java.util.Comparator )
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.htmlComparable가 구현된 클래스에서 기본 정렬과는 다르게 원하는 방식으로 정렬해주는 인터페이스이다.
성적순으로 내림차순으로 정렬하면서 입학년도가 같을때 입학년도로 오름차순으로 정렬하고싶다면 어떻게 해야할까?
기본정렬과 다르게 정렬 하고싶을때 Comparator 를 이용하면 된다.
import java.util.Arrays;
import java.util.Comparator;
public class Exam_sort2 {
public static void main(String[] args) {
Student2[] Student2 = new Student2[5];
//순서대로 "이름", 입학년도
Student2[0] = new Student2("KIM", 2012, 4.1);
Student2[1] = new Student2("LEE", 2011, 2.7);
Student2[2] = new Student2("CHO", 2017, 3.5);
Student2[3] = new Student2("BAK", 2009, 2.5);
Student2[4] = new Student2("PANG", 2011, 3.5);
Arrays.sort(Student2, new Comparator<Student2>(){
public int compare(Student2 s1, Student2 s2) {
double s1Grade = s1.grade;
double s2Grade = s2.grade;
if(s1Grade == s2Grade){ //입학년도가 같으면
return Integer.compare(s1.year, s2.year); //입학년도 오름차순
}
return Double.compare(s2.grade, s1.grade); //성적 내림차순
}
});
for(int i=0;i<5;i++)
System.out.println(Student2[i]);
}
}
class Student2 implements Comparable<Student> {
String name; //이름
int year; //입학년도
double grade; //학점
public Student2(String name, int year, double grade){
this.name = name;
this.year = year;
this.grade = grade;
}
public String toString(){
return "이름: "+name+", 입학년도 : "+year+", 학번 : "+grade;
}
@Override
public int compareTo(Student student) {
return Integer.compare(year, student.year); //입학년도 기준으로 오름차순 정렬
}
}
* GitHub
0 개의 댓글:
댓글 쓰기