Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ubuntu
- LIST
- pip
- 핑거스타일
- YOLO
- Python
- C
- JSON
- Visual Studio
- paramiko
- error
- OpenCV
- label
- 오류
- 기타 연주
- mysql
- 채보
- Selenium
- Linux
- SSH
- VS Code
- 프로그래머스
- C#
- pytorch
- C++
- Docker
- pandas
- 컨테이너
- Numpy
- windows forms
Archives
- Today
- Total
기계는 거짓말하지 않는다
Comparable / Comparator 본문
- Comparable
comparable 인터페이스는 compareTo 메서드를 오버라이딩 해야한다.
class에 인스턴스 변수가 여러 개일 경우 기준이 필요하다.
이 메서드 구현으로 순서 판단 기준을 결정한다. 매개변수 1개이며 sort 메서드 사용 시 기준이 된다.
import java.util.Arrays;
class Data implements Comparable<Data> {
int num;
String str;
Data(int num, String str) {
this.num = num;
this.str = str;
}
@Override
public int compareTo(Data d) {
if(num != d.num) {
return num - d.num; // 오름차순, 반대면 내림차순
}
else {
return str.compareTo(d.str); // num이 같을 경우 str로 오름차순
}
}
@Override
public String toString() {
return num + " " + str;
}
}
public class Test {
public static void main(String[] args) {
Data[] dataArr = new Data[5];
dataArr[0] = new Data(5, "AB");
dataArr[1] = new Data(5, "BC");
dataArr[2] = new Data(5, "CDA");
dataArr[3] = new Data(7, "ASD");
dataArr[4] = new Data(10, "JK");
Arrays.sort(dataArr);
for(Data d : dataArr) {
System.out.println(d);
}
}
}
num을 기준으로 오름차순, 같을 경우 str을 기준으로 오름차순 한다.
- Comparator
comparator 인터페이스는 compare 메서드를 오버라이딩 해야한다.
class 자체가 정렬 기준이며 따라서 매개변수를 2개 받아야한다.
Collections의 sort를 사용하여 Comparator를 구현한 class를 이용하고 List를 받는다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Data{
int num;
String str;
Data(int num, String str) {
this.num = num;
this.str = str;
}
@Override
public String toString() {
return num + " " + str;
}
}
class SortData implements Comparator<Data> {
@Override
public int compare(Data d1, Data d2) {
if(d1.num != d2.num) {
return d2.num - d1.num; // 내림차순, 반대면 오름차순
}
else {
return d2.str.compareTo(d1.str); // num이 같을 경우 str로 내림차순
}
}
}
public class Test {
public static void main(String[] args) {
ArrayList<Data> dataArr = new ArrayList<>(5);
dataArr.add(new Data(5, "AB"));
dataArr.add(new Data(5, "BC"));
dataArr.add(new Data(5, "CDA"));
dataArr.add(new Data(7, "ASD"));
dataArr.add(new Data(10, "JK"));
Collections.sort(dataArr, new SortData());
for(Data d : dataArr) {
System.out.println(d);
}
}
}
내림차순 정렬 결과이다.
Comments