Comparable = 기본적인 정렬기준을 구현
- Comparable
저게 끝이다. 자바에서 정렬이 가능한 객체는 모두 Comparable 을 구현하고 있다.
아래의 코드를 보자.
우리가 흔히 쓰는 Arrays.sort(); 도 역시 Comparable 을 구현한 클래스에 대해서 작동한다.
아래 코드를 보면 Integer 클래스는 인터페이스 Comparable<Integer> 를 구현했다.
- Comparable 구현 예시
Student 클래스를 하나 정의하자.
height 는 키이고 score는 점수다.
그리고 Arrays.sort(); 를 이용해 정렬해보자.
그러면 아래와 같은 에러가 뜰것이다.
요약하면 Comparable를 구현하지 않은 클래스의 정렬을 시도해서 생겼다. 즉 정렬가능한 객체가 아니라는 소리다.
정렬가능하도록 Student 클래스를 수정해보자.
Student 클래스를 새로 만들고 기본정렬을 height 에 대해 오름차순으로 정렬하도록 하였다.
height를 오름차순으로 정렬하기 위해서 반환값
- 비교하는 height가 더 크다면 -1
- 비교하는 height가 더 작다면 1
- 비교하는 height가 같다면 0
이렇게 클래스를 완성하면 이제 Student는 height를 오름차순으로 정렬가능한 객체가 되었다. 즉, 기본정렬 기준으로 height를 오름차순으로 한 것이다.
main함수를 그대로 유지한 채로 프로그램을 실행하면 아래와 같은 결과를 얻는다.
height에 대해 내림차순으로 정렬해보자. 그러기 위해서 Student클래스의 compareTo 함수를 아래처럼 바꾼다.
다른점이 있는가? 바로 return 값에 -1을 곱한 것이다. 그러면 오름차순의 역으로 다시 정렬 된다. 결과는 아래처럼 나온다.
- height를 오름차순으로 정렬하고 height가 같다면 score를 내림차순으로 정렬하기
중복된 height를 만들기 위해 main함수를 아래 처럼 수정한다.
그리고 compareTo 를 아래처럼 한뒤 프로그램을 실행해보자.
height에 대해서 오름차순으로 정렬되었지만 원하는 결과는 아니다.
우리는 height가 같은 경우!!! 에만 따로 처리해주면 된다.
기존 코드는 유지한채로 height 가 같은 부분만 따로 빼서 아래의 코드처럼 작성해주면된다.
height가 106인 경우 score가 내림차순으로 잘 정렬되었다.
'Java' 카테고리의 다른 글
[JAVA] ArrayList remove for loop ( ConcurrentModificationException) (0) | 2021.02.24 |
---|---|
[JAVA] Comparator 란? (feat. Generics ) (0) | 2021.02.24 |
[JAVA] next_permutation, prev_permutation (0) | 2020.09.19 |
백트래킹을 이용한 순열 in java (0) | 2020.08.30 |
[JAVA] 비트 연산자를 이용하여 조합 & 부분집합 & 부분집합 여부파악 (0) | 2020.08.30 |
댓글