티스토리 뷰
반응형
🤔 Comparator와 Comparable이란?
✔ 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
✅ Comparable : 기본 정렬기준을 구현하는데 사용
✅ Comparator : 기본 정렬 기준 외에 다른 기준으로 정렬할 때 사용
public interface Comparator {
int compare(Object o1, Object o2); // o1, o2 두 객체 비교
boolean equals(Object obj); // equals를 오버라이딩하라는 뜻
}
public interface Comparable {
int compareTo(Object o); // 주어진 객체(o)를 자신과 비교
}
✔ compare()와 compareTo()는 두 객체의 비교 결과를 반환하도록 작성
public final class Integer extends Number implements Comparable {
...
public int compareTo(Integer anotherInteger) {
int v1 = this.value;
int v2 = anotherInteger.value;
// 같으면 0, 오른쪽 값이 크면 -1, 작으면 1 반환
return (v1 < v2 ? -1 : (v1==v2? 0 : 1));
}
...
}
예제를 통해 개념을 학습하자.
import java.util.Arrays;
import java.util.Comparator;
public class Ex11_7 {
public static void main(String[] args) {
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr); // String의 Comparable 구현에 의한 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분 x
System.out.println("strArr = " + Arrays.toString(strArr));
Arrays.sort(strArr, new Descending()); // 역순 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
}
}
class Descending implements Comparator {
public int compare(Object o1, Object o2) {
if(o1 instanceof Comparable && o2 instanceof Comparable){
Comparable c1 = (Comparable)o1;
Comparable c2 = (Comparable)o2;
return c1.compareTo(c2) * -1; // -1 곱해서 기본 정렬방식 역순으로 변경
// 또는 c2.compareTo(c1)으로 작성가능
}
return -1;
}
}
잘 몰랐던 내용이라 아직
헷갈리는게 있지만
주말을 통해 반복해 체화시켜야 겠다!
그럼 다음 포스팅에서 다시 만나자. 😊
반응형
'프로그래밍 > 자바' 카테고리의 다른 글
[자바의 정석] Ch 11 총정리 - 1 (Collection, framework, ArrayList, LinkedList) (0) | 2022.07.23 |
---|---|
[자바] 향상된 for문이란? (for i : arr) 의미 🤔 (0) | 2022.07.14 |
[자바의 정석] Ch11 25~29 Arrays란? (0) | 2022.07.06 |
[자바의 정석] Ch 11-22 Iterator, ListIterator, Enumeration 이란? (0) | 2022.07.05 |
[자바의 정석] Iterator 사용이유⭐⭐⭐ (0) | 2022.07.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 해커랭크
- JPA
- 정보처리 산업기사
- 자바의 정석
- 강의
- Java
- hackerrank
- stack
- BAEKJOON
- queue
- 22 정보처리 산업기사
- 그리디
- 해커랭크 자바
- 정보처리산업기사 공부법
- ORM
- LinkedList
- 디버깅
- 정보처리산업기사
- hackerrank challenges
- 해커랭크 자바 챌린지
- 풀이
- 해커랭크 챌린지
- 자바
- 개발자
- 소스코드
- 챌린지
- challenges
- 22 정보처리산업기사
- 백준
- 코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함