작성
·
183
3
Meeting 룸에서
compare 메서드의 o1.start - o2.start를 했는데
배열 정렬시 기준으로 삼을 return 값을 어떻게 해서
o1.start - o2.start 는 오름차순이고
o2.start - o1.start는 내림차순이 되는건지 잘 모르겠습니다
답변 1
2
안녕하세요?
먼저 제가 예제를 올려놨습니다. github 에 javacoding_top50/01_Basic/CompareTest.java
돌려보시면 됩니다.
compare는 많이 나오는 예제이므로 완전히 이해해야하죠. 특히 스트링 소팅이런건 단골 메뉴입니다.
1. 먼저 Comparator를 이해하기 위해서는 compareTo() 메서드를 완전히 이해해야합니다.
예를들어)[5,3,8]을 compareTo() 를 이용하여 비교할때
5.compareTo(5) 이면 리턴값이 0
5.compareTo(3) 이면 리턴값이 1
5.compareTo(88) 이면 리턴값이 -1
이렇게 나옵니다.
compareTo를 베이스로 소팅을 만들었기에, 리턴값이 1일때 오름차순으로 소팅이 됩니다.(예제를 돌려보시면 알 수 있습니다)
그래서 질문주신
"o1.start - o2.start 는 오름차순이고
o2.start - o1.start는 내림차순이 되는건지 잘 모르겠습니다"
앞에 숫자가 크면 리턴값이 1이되고 오름차순이 되는거죠, 내부적으로 compareTo가 동작한겁니다.
아래 1번과 2번은 오름차순 셋팅입니다.
//1
Comparator<Student> comp2 = new Comparator<Student>() {
public int compare(Student s1, Student s2) {
return s1.score - s2.score;
}
};
//2
Comparator<Student> comp = new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.getScore() > s2.getScore()) {
return 1;
} else if (s1.getScore() < s2.getScore()) {
return -1;
}
return 0;
}
};