728x90
⬛ 사용자 정의 객체 정렬 | Comparable<객체>
💡 (1) Comparable을 이용하여 Java 객체를 정렬할 수 있다.
💡 (2) Comparator을 이용하여 Java 객체를 정렬할 수 있다.
⬛ 객체 정렬
- 객체를 사용자가 정의한 정렬 기준에 맞춰 정렬해야 하는 경우
- Ex) 좌표를 x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬
- Ex) 국어점수는 증가하는 순, 수학점수는 감소하는 순으로 정렬
⬛ Comparable 인터페이스 사용
- 기본적으로 적용될 정렬 기준이 되는 메소드 정의하는 인터페이스
- 정렬할 객체에 Comparable interface를 implements 후,
- compareTo() 메서드를 오버라이드하여 구현한다.
🟪 compareTo() 메소드 사용법 | 기본 int형 정렬
- (1) 현재 개체 < 파라미터로 넘어온 객체 : 음수 리턴
- (2) 현재 객체 == 파라미터로 넘어온 객체 : ‘0’ 리턴
- (3) 현재 객체 > 파라미터로 넘어온 객체 : 양수 리턴
- ⇒ 음수 or ‘0’ 이면, 객체의 자리가 그대로 유지
- ⇒ 양수이면, 두 객체 자리가 바뀐다.
@Override
public int compareTo(Point p) {
return this.필드 - p.필드; //기본 오름차순 정렬
return p.필드 - this.필드; //내림차순 정렬
}
}
// x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬하라.
class Point implements Comparable<Point> {
int x, y;
@Override
public int compareTo(Point p) {
if(this.x > p.x) {
return 1; // x에 대해서는 오름차순
}
else if(this.x == p.x) {
if(this.y < p.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
}
// main에서 사용법
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);
🟪 compareTo() 메소드 사용법 | String 형 정렬
compareTo() 반환값 기준 :
- 양수 반환 : this 객체 > 파라미터 객체 : 즉 두 객체의 자리를 바꾸고
- 음수 반환 : this 객체 < 파라미터 객체
- 0 반환 : 두 객체가 같다
compareTo를 사용한 문자열 비교
compareTo는 두 문자열이 단순히 같은지 아닌지를 알려줄 뿐만 아니라 어떤것이 사전적인 순서로 더 앞,뒤에 존재하는지를 알려준다.
반환값이 음수이면 compareTo를 호출하는 문자열이 더 앞에 있다는 뜻이고
반환값이 0이면 두 문자열이 같다는 뜻이고
반환값이 양수이면 매개변수로 입력되는 문자열이 더 앞에 있다는 뜻이다.
String 문자열 간 사전순 정렬
class Market implements Comparable<Store>{
String name;
String phoneNum;
String address;
@Override
public int compareTo(Market m) {
//int형에 this.name 과 타 객체의 name 필드 비교한 값을 담고
// 그 결과값을 기준으로
int compareResult = this.name.compareTo(m.name);
if (compareResult < 0) {
return -1;
} else if (compareResult > 0) {
return 1;
}
return 0;
}
}
728x90
'코딩 테스트 [준비] > JAVA | 활용할 문법 정리' 카테고리의 다른 글
JAVA | 알파벳, 대/소문자 확인하는 방법 | isUpperCase(), isLowerCase(), isAlphabetic() (0) | 2023.07.21 |
---|---|
JAVA | 사용자 정의 객체 정렬 - String 타입의 사전 순 정렬 (0) | 2023.07.21 |
JAVA | 배열 Arrays.sort() 기준 재정의 : Comparator 익명 클래스 구현 (0) | 2023.06.15 |
JAVA | 특수문자로 Split(), replaceAll() 사용 시 주의할 점 (0) | 2023.06.14 |
JAVA| 그래프 표현 방식 2가지 | ArrayList<Integer> 의 사용 (0) | 2023.06.09 |