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 | 29 | 30 |
Tags
- pandas
- C++
- paramiko
- Linux
- C
- windows forms
- Python
- 채보
- Docker
- error
- 오류
- ubuntu
- label
- SSH
- mysql
- OpenCV
- Selenium
- 프로그래머스
- JSON
- nvidia-smi
- Visual Studio
- 컨테이너
- Numpy
- YOLO
- VS Code
- 기타 연주
- pytorch
- C#
- pip
- 핑거스타일
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